Code前端首页关于Code前端联系我们

Java服务器启动mysql,服务器启动

terry 2年前 (2023-09-30) 阅读数 40 #Mysql
文章标签 Mysql

本文目录:

  • 1、java连接mysql数据库的方法
  • 2.如何使用java开启mysql交易,详细要求
  • 3.JAVA连接mysql
  • 4、如何用java 5分钟实现最简单的mysql代理服务器
  • 5、java中如何连接mysql数据库

如何连接java连接mysql数据库

Java连接mysql和连接oracle是一样的

第一步配置驱动

第二步配置数据库服务地址。默认端口是3306

第三步打开连接(用户和密码配置)

具体代码如下:

String url = "jdbc:mysql://localhost:3306/javademo ?user= rootpassword=rootuseUnicode=truecharacterEncoding=UTF8";

Class.forName("com.mysql.jdbc.Driver" );//动态加载mysql驱动

conn = Driverconn = DriverConn = Driver . 获取连接; Statement stmt = conn.createStatement();

如何使用java开启mysql事务,需要详细信息

取决于你的事务类型,jdbc事务、分布式事务、容器事务

1、编程式事务管理(jdbc事务与连接绑定)

Connectionconnection = null;

try

{

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID" "用户名","密码");

conn.setAutoCommit(false); //取消自动发送

ReadyStatement ps = conn.prepareCall("更新一些东西");

ResultSet rs = ps.executeQuery();

conn.commit(); //手动投递

}

catch(异常e)

{

conn.rollback();

e.printStackTrace(); 2.声明式事务

首先在项目应用中添加以下代码。然后添加注解

@Transactional(rollbackFor = IOException.class)

public void add(String name) throws IOException

{

System.out.println("可以添加注解事务 0~0" ) 在类和方法中;

抛出新的IOException();

}

直接调用接口方法即可

分布式事务流程(5.X出现mysql(后续会支持),

1.可以直接使用spring +atomikos框架进行管理

参考:

测试代码我就不贴了,直接看配置本身

2、使用JTA(Java Transaction API)进行分布式事务管理(测试代码如下)

import java.sql.连接;

导入 java.sql.PreparedStatement;

导入 java.sql.SQLException;

导入 javax.naming.InitialContext;

导入 javax.sql.DataSource;

stemimport.javax导入 javax.transaction.UserTransaction ;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

//分布式事务处理

public class transferAccount )

public void testTransferAccount()

{

JAVA连接mysql

经过查看Mysql文档,以及Connector/J文档和网上说明,发现出现这个异常的原因是:Mysql服务器默认的“wait_timeout”是8小时,也就是说连接存在。闲置超过8小时。 Mysql会自动断开连接。这就是问题。如果C3P0池中的连接静默超过8小时,Mysql将断开该连接,并且C3P0不会知道该连接已过期。如果此时Client请求连接,C3P0就会向Client提供一个过期的Connection,从而导致上述异常。

上网搜了一下,在MySQL论坛上找到了方法。如果执行sql语句时出现上述异常,请重新执行该sql语句。

实验发现这种方法对于使用spring+hibernate的这个服务是无效的。

进一步搜索发现MySQL官方不建议使用autoReconnect=true,参见

你应该另想办法解决这个问题。

因为问题的主要原因是服务到数据库的连接长时间处于非活动状态,由于重新连接的方法无效,所以可以尝试另一种方法,就是防空闲。

自己写线程会比较麻烦,避免空闲时间。

最后在网上找到了解决方案。配置连接池休眠,建议使用c3p0,然后配置c3p0的防空闲idle_test_period设置,只要小于MySQL等待超时即可。

将以下项目添加到 hibernate.cfg.xml:

!-- 通过 c3p0 配置池--

property name="hibernate.connection.provider_class"org.hibernate.connection.C3P0ConnectionProvider /provider 属性名称=“c3p0.min_size”5/属性

属性名称=“c3p0.max_size”30/属性

属性名称=“c3p0.time_out”1800/属性 !-- 秒 --!-- : 0 --

property name="c3p0.max_statement"50/property !-- 默认值:0 --

property name="c3p0.acquire_increment"1/property !-- 默认值:1 --

属性name="c3p0.idle_test_period"120/property !-- 秒 --!-- default: 0 --

property name="c3p0.validate"true/property

修改后测试,解决问题。

---------------------------------------------------------- ----- ---- ----------

DBCP连接池说明:

DriverClassName

url

用户名

密码

以上四种是驱动程序、连接字符串、用户名和密码

maxActive 连接池支持的最大连接数

maxIdle 连接池中可空闲的最大 maxIdle 连接数

minIdle 最大空闲 maxIdle 连接数连接池

initialSize 初始化连接数

max Wait 当连接池中的连接用完时,新请求等待时间,毫秒

timeBetweenEvictionRunsMillis timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis 一起使用。每隔

timeBetweenEvictionRunsMillis 毫秒检查一次连接池中的空闲连接。空闲时间超过 minEvictableIdleTimeMillis 毫秒的连接将被断开,直到连接池中的连接数达到 minIdle

minEvictableIdleTimeMillis 连接池中的连接时间可以空闲,毫秒

移除为 true,以秒为单位保留未使用的活动。清除后不重新进入池连接

removeAbandonedTimeout 活动连接最大空闲时间

logLeave true, false,连接池恢复空闲活动连接时是否打印消息

minEvictableIdleTimeMillis,removeAbandonedTimeout 这两个参数用于不同的连接对象。 minEvictableIdleTimeMillis 用于连接池中的连接对象,removeAbandonedTimeout 用于尚未关闭的活动连接。

c3p0 连接池描述:

driverClass

jdbcUrl

user

password

minPoolSize PoolSize PoolSize ac quireIncrement 有时一次请求获取的连接数否 池中是否有空闲连接

maxIdleTime 池中连接的最大空闲时间

getRetryAttempts 连接获取失败后重试次数?unreturnedConnectionTimeout 活动连接超时。

jdbcurl 建议不要使用 autoReconnect=true。

---------------------------------------------------------- ----- ---- -----------------------------------

session.close();为什么不调用connection.close()?

如果您的 Connection 来自连接池,它只是返回到池中,而不会物理关闭它。这是正常结果。

调用connection.close()时,连接对象是关闭还是不关闭,直接返回到连接池?

这取决于连接池的实现。一般来说,返回连接池是因为创建新连接的开销太大。

让一个SessionFactory对应一个Connection,SessionFactory中的Session是共享的Connection。所以关闭Session对Connection没有影响。

数据库连接池只是一个特殊的对象池。对象池功能可以防止直接获取新对象并减少开销。将连接返回到连接池就是释放对象池中Connection对象的引用,以便该对象可以被其他人重用。当调用 conn.close() 时,它仅释放引用,并不会关闭物理连接。

连接对象重写了连接池上的关闭方法,所以并不是真正意义上的关闭。理解。当然,不同的连接池有不同的实现方法。连接只是一个接口。不同的连接池实现类是不同的,但是我们感受不到。

如何使用java 5分钟实现最简单的mysql代理服务器

public class MysqlProxyServer {

private static final Logger logger = LoggerFactory.getLogger(MysqlProxyServer.class);

public static void main(String []Vert) {vert.Vert. new MysqlProxyServerVerticle());

}

公共静态类MysqlProxyServerVerticle扩展AbstractVerticle {

私有最终int端口= 3306;

私有字符串最终mysqlHost =“10.10.0.0.6public”;()抛出异常{

NetServer netServer = vertx.createNetServer();//创建代理服务器

NetClient netClient = vertx.createNetClient();//创建mysql客户端连接

netServer.connectHandler(port connection -netClientHandler. , mysqlHost, result - {

//响应客户端的连接请求,成功后与目标mysql服务器建立连接

if (result.succeeded()) {

//与目标mysql服务器成功后连接,创建 MysqlProxyConnection 对象并执行代理方法

new MysqlProxyConnection(socket, result.result()).proxy();

} else {

logger.error(hasil . Cause().getMessage (), result.cause());

socket.close();

}

})).listen(port, ListenResult - {//监听代理服务器端口

if (listenResult .succeeded()) {

//启动代理服务器成功

logger.info("Mysql代理服务器启动。");

} else {

//启动代理服务器失败

logger.error("Mysql代理退出。因为: " + ListenResult.cause().getMessage(), ListenResult.cause());

System.exit(1);

}

});

}

}

public static class MysqlProxyConnection {

final private NetSocket clientSocket;

private Final NetSocket serverSocket;

NetSocket ServerSocket NetSocket ClientSocket

this. clientSocket = clientSocket;

this.serverSocket = serverSocket;

}

private void proxy() {

//当proxy与mysql服务器的连接关闭时,关闭client与proxy的连接

serverSocket .closeHandler(v - clientSocket.close());

//反之

clientSocket.closeHandler(v - serverSocket.close());

//当连接发生异常时任一端,关闭两端的 Connection

serverSocket.exceptionHandler(e - {

logger.error(e.getMessage(), e);

close();

});

clientSocket.exceptionHandler(e - {

logger.error(e.getMessage(), e);

close();

});

//收到客户端数据包时,转发to mysql 目标服务器

clientSocket.handler(buffer - serverSocket.write(buffer));

//收到 mysql 目标服务器发来的数据包时,转发给客户端

serverSocket.handler(buffer - clientSocket.write(buffer));

}

private void close() {

clientSocket.close();

serverSocket.close();

}

}

}

测试一下

try {

Class.forName(name);//判断连接类型

Connection conn = DriverManager.getConnection,password);(url, user .getConnection); //url为代理服务器地址

PreparedStatement pst = conn.prepareStatement("select * from test;");//准备执行语句

ResultSet resultSet = pst.executeQuery();

while (resultSet .next()) {

System.out.println(resultSet.getLong(1) + ": " + resultSet.getString(2));

}

} catch (异常 e ) {

e.printStackTrace();

}

java中如何连接mysql数据库

维护MySQL数据库和其他数据库的链接,套路基本一致

工作准备:

1:驱动数据库。导入工程

2:启动MySQL服务

编码工作:

                       // 1.注册驱动

Class.forName("com.Dri.j"); 。连接数据库

Connection connection = DriverManager.getConnection(DB_URL, NAME, PSWD) ;

//数据库地址、用户名、密码

// 3、准备执行sql语句       Statement      stat = conn.createStatement();

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门