JDBC一些报错记录一下(不定时更新补充)

错误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&amp;characterEncoding=utf8&amp;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&amp;characterEncoding=utf8&amp;uesSSL=true&amp;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&amp;characterEncoding=utf8&amp;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&amp;characterEncoding=utf8&amp;uesSSL=true&amp;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根目录下,不然会报错!这个坑我踩了两次!!!

猜你喜欢

转载自blog.csdn.net/m0_67042480/article/details/129778662