会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132382个问题
JAVA 全系列/第三阶段:数据库编程/JDBC技术 376楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库的使用 377楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 378楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 380楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 381楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 382楼


1651156283(1).png

package com;

import com.mysql.jdbc.PreparedStatement;

import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class DynamicConditionQuertTest {
    /**
     * 动态条件查询Users
     */
    public List<Users> queryUser(Users users){
        List<Users> list = new ArrayList<>();

        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet rs = null ;
        try {
            //创建链接
            connection = jdbcUtill.getConnection();
            //拼接查询sql语句
            String sql = this.generateSql(users);
            System.out.println(sql);
            //创建PreparedStatement对象
            ps = (PreparedStatement) connection.prepareStatement(sql);
            //执行sql
            rs = ps.executeQuery();
            while (rs.next()){
                Users users1 = new Users();
                users1.setUserid(rs.getInt("userid"));
                users1.setUserage(rs.getInt("userage"));
                users1.setUsername(rs.getString("username"));
                list.add(users1);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            jdbcUtill.closeResource(rs,ps,connection);
        }
        return list;
    }

    /**
     * 生成动态条件查询sql
     * @param
     */
    public String generateSql(Users users){
        StringBuffer sb = new StringBuffer("select * from users where 1=1");

        if (users.getUserid()>0){
            sb.append("and userid = ").append(users.getUserid());
        }
        if(users.getUsername()!=null&&users.getUsername().length()>0){
            sb.append("and username = '").append(users.getUsername()).append("'");

        }
        if (users.getUserage()>0){
            sb.append("and userage =").append(users.getUserage());
        }
        return sb.toString();

    }

    public static void main(String[] args) {
        DynamicConditionQuertTest dcq = new DynamicConditionQuertTest();
        Users users1 = new Users();
        users1.setUsername("xiaoming");
        users1.setUserage(23);
        List<Users> list = dcq.queryUser(users1);

        for (Users users2 :list){
            System.out.println(users2.getUserid()+" "+users2.getUsername()+" "+users2.getUserage());
        }

    }
}


异常报错

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'username = 'xiaoming'and userage =23' at line 1


我没加限定条件

 users1.setUsername("xiaoming");
        users1.setUserage(23);

是没报错的,加了反而报错不知道为什么,老师看一下

JAVA 全系列/第三阶段:数据库编程/JDBC技术 383楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库的使用 384楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 386楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库的使用 388楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 389楼

/**
*Test类
*/
package com.itbaizhan;

public class Test {
    public static void main(String[] args) {
        StatementTest st =new StatementTest();
        st.insertUser("hxf",25);
    }
}

package com.itbaizhan;

import java.sql.Connection;
import java.sql.Statement;

/**
 *  Statement对象的使用
 */

public class StatementTest {
    public void insertUser(String username,int userage){
        Connection connection =null;
        Statement statement =null;
        try {
            //获取Connection对象
            connection=JdbcUtils.getConnection();
            //获取Statement对象
            statement=connection.createStatement();
            //定义需要执行的SQL语句
            String sql ="insert into users values(default,'"+username+"',"+userage+")";
            //执行SQL,返回boolean值,如果sql有结果集返回,那么返回值为true,如果没有结果集返回,则返回false。
            boolean execute =statement.execute(sql);
            System.out.println(execute);

        }catch (Exception e){
            e.printStackTrace();
        }finally {
                JdbcUtils.closeResource(statement,connection);
        }
    }
}



package com.itbaizhan;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * Jdbc工具类
 */
public class JdbcUtils {
    private static String url;
    private static String name;
    private static String pwd;

    static  {
        try{
            //实例化properties对象
            Properties prop=new Properties();
            //获取读取properties文件的字节输入流对象
            InputStream is = JdbcTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");
            //读取properties文件并解析
            prop.load(is);
            //获取链接数据库的url,用户名,密码
            String url = prop.getProperty("url");
            String name = prop.getProperty("username");
            String pwd = prop.getProperty("pwd");
            //获取数据库驱动全名
            String driver = prop.getProperty("driver");
            //加载并注册驱动
            Class.forName(driver);

        }catch ( Exception e){
            e.printStackTrace();
        }
    }

    //获取数据库链接对象
    public static Connection getConnection(){

        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url,name,pwd);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    //关闭数链接对象
    public static void closeConnection(Connection connection){
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //提交事务
    public static void commit(Connection connection){
        try {
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //回滚事务
    public static void rollback(Connection connection){
        try {
            connection.rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //关闭Statement对象
    public static void  closeStatement(Statement statement){
        try {
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //关闭ResultSet
    public static void closeResultSet(ResultSet resultSet){
        try {
            resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //DML操作时关闭资源
    public static void closeResource(Statement statement,Connection connection){
        //先关闭Statement对象
        closeStatement(statement);

        //后关闭Connection对象
        closeConnection(connection);
    }
    // //查询时关闭资源
    public static void closeResource(ResultSet resultSet,Statement statement,Connection connection){
        //先关闭ResultSet
        closeResultSet(resultSet);
        //在闭Statement对象
        closeStatement(statement);
        //最后关闭Connection对象
        closeConnection(connection);
    }
}


#连接Mysql数据库的URL
url=jdbc:mysql://localhost:3306/itbz?useSSL=false&useUnicode=true&characterEncoding=utf-8
#连接数据库的用户名
username=root
#连接数据库的密码
pwd=root
#数据库驱动名称
driver=com.mysql.jdbc.Driver


image.png

老师,我代码查了几遍,url也试了,在上节课的案例中不通过工具类链接数据库是不报错的,工具类的代码检查几遍后不懂哪里出错了,您能帮我看看吗


JAVA 全系列/第三阶段:数据库编程/JDBC技术 390楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637