• 【JDBC笔记】PreparedStatement通用查询数据表


    本文利用的数据库如下

    目录

    Java与SQL对应数据类型转换表

    PreparedStatement查询数据表操作


    Java与SQL对应数据类型转换表

    如果想查询对应数据表的数据,我们就需要制造一个表的对象,里面包含了表中的内容,比如本文查询一下 Customers 数据表

     我们就可以根据转换表,写出数据表对象

    1. import java.sql.Date;
    2. public class Customer {
    3. private int id;
    4. private String email;
    5. private String name;
    6. private Date birth;
    7. public Customer() {
    8. super();
    9. }
    10. public Customer(int id, String email, String name, Date birth) {
    11. super();
    12. this.id = id;
    13. this.email = email;
    14. this.name = name;
    15. this.birth = birth;
    16. }
    17. public int getId() {
    18. return id;
    19. }
    20. public void setId(int id) {
    21. this.id = id;
    22. }
    23. public String getEmail() {
    24. return email;
    25. }
    26. public void setEmail(String email) {
    27. this.email = email;
    28. }
    29. public String getName() {
    30. return name;
    31. }
    32. public void setName(String name) {
    33. this.name = name;
    34. }
    35. public Date getBirth() {
    36. return birth;
    37. }
    38. public void setBirth(Date birth) {
    39. this.birth = birth;
    40. }
    41. @Override
    42. public String toString() {
    43. return "Customer [id=" + id + ", email=" + email + ", name=" + name + ", birth=" + birth + "]";
    44. }
    45. }

    PreparedStatement查询数据表操作

    要查询数据库,我们可以先梳理一下思路。首先我们要知道查询哪个表,查询语句是什么,查询多少数据。那么顺着这个思路,我们就可以把以上三点写为参数传入方法中

    1. import java.io.InputStream;
    2. import java.lang.reflect.Field;
    3. import java.sql.DriverManager;
    4. import java.sql.ResultSet;
    5. import java.util.ArrayList;
    6. import java.util.List;
    7. import java.util.Properties;
    8. import org.junit.Test;
    9. import com.mysql.jdbc.Connection;
    10. import com.mysql.jdbc.PreparedStatement;
    11. import com.mysql.jdbc.ResultSetMetaData;
    12. public class JDBCSQLTest {
    13. @Test
    14. public void TestForList() throws Exception {
    15. //如果表名与sql中的关键字重合,我们需要添加着重号
    16. String sql = "select id,name,email from customers where id < ?";
    17. GetForListTest gfl = new GetForListTest();
    18. List<Customer> list = gfl.getForList(Customer.class,sql,12);
    19. list.forEach(System.out::println);
    20. }
    21. }
    22. class GetForListTest{
    23. public <T> List<T> getForList(Class<T> clazz,String sql,Object ...args) throws Exception {
    24. //读取文件中的信息
    25. InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
    26. //将用户名和密码封装在Properties中
    27. Properties pros = new Properties();
    28. pros.load(is);
    29. String user = pros.getProperty("user");
    30. String password = pros.getProperty("password");
    31. String url = pros.getProperty("url");
    32. String driverClass = pros.getProperty("driverClass");
    33. //加载驱动
    34. Class.forName(driverClass);
    35. //获取连接
    36. Connection conn = (Connection) DriverManager.getConnection(url, user, password);
    37. //预编译sql语句,返回PreparedStatement的实例
    38. PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
    39. //填充占位符
    40. for (int i = 0;i < args.length;i++) {
    41. ps.setObject(i + 1, args[i]);
    42. }
    43. ResultSet rs = ps.executeQuery();
    44. //获取结果集的元数据:ResultSetMetaData
    45. ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
    46. //通过ResultSetMetaData获取结果集中的列数
    47. int columnCount = rsmd.getColumnCount();
    48. //创造集合
    49. ArrayList<T> list = new ArrayList<T>();
    50. while(rs.next()) {
    51. T t = clazz.newInstance();
    52. //处理结果集一行数据中的每一个列:给t对象指定的属性赋值
    53. for (int i = 0;i < columnCount; i++) {
    54. //获取列值
    55. Object columnValue = rs.getObject(i + 1);
    56. //获取每个列的列名
    57. String columnLabel = rsmd.getColumnLabel(i + 1);
    58. //通过反射给t对象指定的columnName属性,赋值为columnValue
    59. Field field = clazz.getDeclaredField(columnLabel);
    60. field.setAccessible(true);
    61. field.set(t, columnValue);
    62. }
    63. list.add(t);
    64. }
    65. return list;
    66. }
    67. }

    在查询数据表的时候,我们要获取数据表中的元数据,元数据可以理解为数据的整体(我是这样理解的,不知道对不对,欢迎大家纠正),之后我们利用遍历获取到一行中(一行就是一次 next 方法)所有列名与列值,再利用循环获取所有数据,存入集合当中

  • 相关阅读:
    JDK中字符的宽度计算流程
    python之Numpy(二)
    brython | 初探鼠标事件-1:点击事件
    js 字符串转数字
    flutter复制口令返回app监听粘贴板
    jQuery_T2_DOM操作
    抓到Dubbo异步调用的小BUG,再送你一个贡献开源代码的机会
    Golang 程序漏洞检测利器 govulncheck(一):安装和使用方法
    Codeforces Round #786 (Div. 3) 补题记录
    python+Django+Neo4j中医药知识图谱与智能问答平台
  • 原文地址:https://blog.csdn.net/lijibai_/article/details/125511809