|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #连接设置
- driverClassName=com.mysql.jdbc.Driver
- url=jdbc:mysql://localhost:3306/jdbcStudy?
- useUnicode=true&characterEncoding=utf8&useSSL=true
- username=root
- password=18870025610
- #<!-- 初始化连接 -->
- initialSize=10
- #最大连接数量
- maxActive=50
- #<!-- 最大空闲连接 -->
- maxIdle=20
- #<!-- 最小空闲连接 -->
- minIdle=5
- #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
- maxWait=60000
- #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
- #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
- 3、编写工具类 JdbcUtils_DBCP
- connectionProperties=useUnicode=true;characterEncoding=UTF8
- #指定由连接池所创建的连接的自动提交(auto-commit)状态。
- defaultAutoCommit=true
- #driver default 指定由连接池所创建的连接的只读(read-only)状态。
- #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:
- Informix)
- defaultReadOnly=
- #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
- #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED,REPEATABLE_READ, SERIALIZABLE
- defaultTransactionIsolation=READ_UNCOMMITTED
复制代码
这个是配置文件
- package zwl.lesson5;
- import com.mysql.jdbc.JDBC4UpdatableResultSet;
- import org.apache.commons.dbcp.BasicDataSource;
- import org.apache.commons.dbcp.BasicDataSourceFactory;
- import javax.sql.DataSource;
- import java.io.InputStream;
- import java.sql.*;
- import java.util.Properties;
- public class jdbcUtils_pool {
- private static DataSource ds =null;
- static {
- try {
- InputStream in = jdbcUtils_pool.class.getClassLoader().getResourceAsStream("dbconfig.properties");
- Properties properties = new Properties();
- properties.load(in);
- ds = BasicDataSourceFactory.createDataSource(properties);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //获取连接 DriverManager.getConnection(url, username, password);
- public static Connection getConnection() throws SQLException {
- return ds.getConnection();
- }
- //释放资源
- public static void release( Connection coon,Statement st, ResultSet re) {
- if (re != null) {
- try {
- re.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- if (st != null) {
- try {
- st.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (coon != null) {
- try {
- coon.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
复制代码- package zwl.lesson5;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- public class TextPool {
- public static void main(String[] args) {
- Connection conn=null;
- PreparedStatement st=null;
- ResultSet rs=null;
- try {
- conn= jdbcUtils_pool.getConnection();
- String sql="INSERT INTO `users`(`id`,`NAME`,`PASSWORD`) VALUE(?,?,?)";
- st=conn.prepareStatement(sql);
- st.setInt(1,5);
- st.setString(2,"kuangsheng");
- st.setString(3,"334223");
- int i=st.executeUpdate();
- if(i>0)
- {
- System.out.println("插入成功");
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }finally {
- jdbcUtils_pool.release(conn,st,rs);
- }
- }
- }
复制代码- E:\JAVAJDK\bin\java.exe "-javaagent:E:\IDEA Community\IntelliJ IDEA Community Edition 2021.3.1\lib\idea_rt.jar=62489:E:\IDEA Community\IntelliJ IDEA Community Edition 2021.3.1\bin" -Dfile.encoding=UTF-8 -classpath "E:\JAVAJDK\jre\lib\charsets.jar;E:\JAVAJDK\jre\lib\deploy.jar;E:\JAVAJDK\jre\lib\ext\access-bridge-64.jar;E:\JAVAJDK\jre\lib\ext\cldrdata.jar;E:\JAVAJDK\jre\lib\ext\dnsns.jar;E:\JAVAJDK\jre\lib\ext\jaccess.jar;E:\JAVAJDK\jre\lib\ext\jfxrt.jar;E:\JAVAJDK\jre\lib\ext\localedata.jar;E:\JAVAJDK\jre\lib\ext\nashorn.jar;E:\JAVAJDK\jre\lib\ext\sunec.jar;E:\JAVAJDK\jre\lib\ext\sunjce_provider.jar;E:\JAVAJDK\jre\lib\ext\sunmscapi.jar;E:\JAVAJDK\jre\lib\ext\sunpkcs11.jar;E:\JAVAJDK\jre\lib\ext\zipfs.jar;E:\JAVAJDK\jre\lib\javaws.jar;E:\JAVAJDK\jre\lib\jce.jar;E:\JAVAJDK\jre\lib\jfr.jar;E:\JAVAJDK\jre\lib\jfxswt.jar;E:\JAVAJDK\jre\lib\jsse.jar;E:\JAVAJDK\jre\lib\management-agent.jar;E:\JAVAJDK\jre\lib\plugin.jar;E:\JAVAJDK\jre\lib\resources.jar;E:\JAVAJDK\jre\lib\rt.jar;C:\Users\a2032\Desktop\JAVA cod\zwl\out\production\zwl;C:\Users\a2032\Desktop\JAVA cod\zwl\lib\commons-dbcp-1.4.jar;C:\Users\a2032\Desktop\JAVA cod\zwl\lib\commons-pool-1.6.jar;C:\Users\a2032\Desktop\JAVA cod\zwl\lib\mysql-connector-java-5.1.47.jar" zwl.lesson5.TextPool
- com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
- at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
- at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
- at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
- at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
- at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
- at com.mysql.jdbc.Util.getInstance(Util.java:408)
- at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:952)
- at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)
- at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)
- at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
- at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
- at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2495)
- at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1903)
- at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2124)
- at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2058)
- at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5158)
- at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2043)
- at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
- at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
- at zwl.lesson5.TextPool.main(TextPool.java:23)
- Process finished with exit code 0
复制代码
这个是我的文件目录结构,不知道哪里错了
从错误信息来看,你遇到了一个`com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction`的异常。这个异常表示在执行数据库事务时,等待锁的时间超过了设定的超时时间。
通常情况下,这个异常出现的原因是由于并发操作导致的。在你的代码中,你执行了一条插入语句`INSERT INTO users (id, NAME, PASSWORD) VALUE(?,?,?)`,如果在同一时刻有其他线程或者连接也在访问该表,可能会导致锁等待超时的问题。
解决这个问题的方法可以有以下几种:
1. 增加等待时间:可以尝试增加`maxWait`属性的值,从当前配置来看,`maxWait`设置为60000,即60秒。你可以将其增加到更大的值,比如120秒,来给其他连接更多的时间来释放锁。
2. 优化查询语句:检查并优化你的查询语句,确保只锁定必要的行和表,减少锁定时间。
3. 使用隔离级别:将数据库的隔离级别设置为更高的级别(如`READ_COMMITTED`)可以减少锁等待时间。
4. 重新设计数据表结构:如果锁等待问题经常发生,可能需要重新设计数据表结构,以减少并发操作导致的锁等待。
另外,关于你提供的代码和文件目录结构,我没有看到明显的问题。如果你能提供更多的错误信息或者日志,我可以帮你更具体地定位问题所在。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|