Java服务器启动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前端网发表,如需转载,请注明页面地址。
code前端网
