JDBC mysql 相关内容笔记

2019-02-25 16:10:43来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

解决乱码: url字符串加上?useUnicode=true&characterEncoding=utf-8;

mysql数据库无法插入中文数据问题:将mysql数据库的编码改为utf-8;

ResultSet中get(列名)方法不一定获取的是数据库字段名,也有可能是自定义的别名,例如:select id,name,password pwd from user 此时resultSet.get("password")会抛出异常!

反射封装JDBC

 1 package test;
 2 
 3 import java.lang.reflect.Field;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.PreparedStatement;
 7 import java.sql.ResultSet;
 8 import java.sql.ResultSetMetaData;
 9 import java.sql.SQLException;
10 import java.util.ArrayList;
11 import java.util.List;
12 
13 public class TestReflectionJDBC<T> {
14 
15     private static Connection connection = null;
16     private static PreparedStatement preparedStatement = null;
17     private static ResultSet resultSet = null;
18 
19     private Connection getConnection() {
20         try {
21             Class.forName("com.mysql.jdbc.Driver");
22             if (connection == null) {
23                 connection = DriverManager.getConnection(
24                         "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", "root", "123456");
25             }
26         } catch (Exception e) {
27             e.printStackTrace();
28         }
29         return connection;
30     }    
31 
32     public List<T> query(String sql,Class<T> clzz,Object...objects){
33         List<T> list=new ArrayList<>();
34         try {
35             preparedStatement=getConnection().prepareStatement(sql);
36             for(int i = 0;i<objects.length;i++){
37                 preparedStatement.setObject(i+1, objects[i]);
38             }
39             resultSet=preparedStatement.executeQuery();
40             if(resultSet!=null){
41                 ResultSetMetaData resultSetMetaData=null;                
42                 while(resultSet.next()){
43                     //if(resultSetMetaData==null){
44                         resultSetMetaData=resultSet.getMetaData();
45                         T t=clzz.newInstance();
46                         int count=resultSetMetaData.getColumnCount();
47                         for(int i=0;i<count;i++){
48                             String name=resultSetMetaData.getColumnName(i+1);
49                             Field field=clzz.getDeclaredField(name);
50                             field.setAccessible(true);
51                             Object value=resultSet.getObject(name);
52                             field.set(t, value);                            
53                         }
54                         list.add(t);
55                     //}
56                 }
57             }
58         } catch (Exception e) {
59             e.printStackTrace();
60         }        
61         return list;
62     }
63     public int update(String sql,Object...objects){
64         int result=0;
65         try {
66             preparedStatement=getConnection().prepareStatement(sql);
67             for(int i=0;i<objects.length;i++){
68                 preparedStatement.setObject(i+1, objects[i]);
69             }
70             result=preparedStatement.executeUpdate();
71         } catch (SQLException e) {
72             e.printStackTrace();
73         }
74         return result;
75     }
76 }

 


原文链接:https://www.cnblogs.com/Meiwah/p/10421402.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java开发笔记(六十三)双冒号标记的方法引用

下一篇:使用zxing二维码识别