错误1
报错代码:
package jdbcFirstDemo.src.lesson05;
import jdbcFirstDemo.src.lesson05.utils.DBCPUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
public class TestDBCP_Delete {
public static void main(String[] args) throws SQLException {
Connection conn=null;
PreparedStatement st=null;
conn= DBCPUtils.getConnection();
//PreparedStatement 和Statement 区别
String sql="delete from users where id=?";
st=conn.prepareStatement(sql);
//执行
int i=st.executeUpdate();
if(i>0) {
System.out.println("删除成功!!");
}
DBCPUtils.release(conn,st,null);
}
}
No value specified for parameter 1
原因:出现因为执行executeQuery()先于对sql语句中的占位符赋值,导致No value specified for parameter 1
要理解清楚语句的逻辑顺序!
修改后代码:
package jdbcFirstDemo.src.lesson05;
import jdbcFirstDemo.src.lesson05.utils.DBCPUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
public class TestDBCP_Delete {
public static void main(String[] args) throws SQLException {
Connection conn=null;
//PreparedStatement st=null;
conn= DBCPUtils.getConnection();
String sql="delete from users where id=?";
PreparedStatement st=conn.prepareStatement(sql);
//手动给参数赋值
st.setInt(1,4);
// st=conn.prepareStatement(sql);
//执行
int i=st.executeUpdate();
if(i>0) {
System.out.println("删除成功!!");
}
DBCPUtils.release(conn,st,null);
}
}
错误2
报错代码:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!--
c3p0的缺省(默认)配置
如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource();"这样写就表示使用的是c3p0的缺省(默认)
-->
<default-config>
<named-config name="c3p0">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true</property>
<property name="user">root</property>
<property name="password">lcl403020</property>
<property name="acquiredIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>
</default-config>
<!--
c3p0的命名配置
如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource("MySQL");"这样写就表示使用的是mysql的缺省(默认)-->
<named-config name="MySQL">
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?userUnicode=true&characterEncoding=utf8&uesSSL=true&serverTimezone=UTC</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="acquiredIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>
</c3p0-config>
这里关键是no suitable driver,因此检查一下配置文件,发现没有任何问题,但是就是找不到驱动,于是我试着把默认配置注释掉看看,结果成功了
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!--
c3p0的缺省(默认)配置
如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource();"这样写就表示使用的是c3p0的缺省(默认)
-->
<!-- <default-config>-->
<named-config name="c3p0">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true</property>
<property name="user">root</property>
<property name="password">lcl403020</property>
<property name="acquiredIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>
<!-- </default-config>-->
<!--
c3p0的命名配置
如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource("MySQL");"这样写就表示使用的是mysql的缺省(默认)-->
<!-- <named-config name="MySQL">-->
<!-- <property name="driverClass">com.mysql.cj.jdbc.Driver</property>-->
<!-- <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?userUnicode=true&characterEncoding=utf8&uesSSL=true&serverTimezone=UTC</property>-->
<!-- <property name="user">root</property>-->
<!-- <property name="password">123456</property>-->
<!-- <property name="acquiredIncrement">5</property>-->
<!-- <property name="initialPoolSize">10</property>-->
<!-- <property name="minPoolSize">5</property>-->
<!-- <property name="maxPoolSize">20</property>-->
<!-- </named-config>-->
</c3p0-config>
错误3
记得在JDBC所有配置文件都要放在src根目录下,不然会报错!这个坑我踩了两次!!!