zoukankan      html  css  js  c++  java
  • JDBC mysql 相关内容笔记

    解决乱码: 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 }
    Higher, faster, stronger!
  • 相关阅读:
    STL--sort源码分析
    进程和线程的区别
    static 关键字 静态成员变量及静态成员函数
    二叉树遍历总结 先序、中序、后续、广度、深度
    C++用new和不用new创建类对象区别
    传输层--TCP和UDP的区别
    传输层的作用
    微信商户/H5支付申请 被拒原因:网站存在不实内容或不安全信息
    Oracle本地网络服务名配置
    存储过程常用技巧
  • 原文地址:https://www.cnblogs.com/Meiwah/p/10421402.html
Copyright © 2011-2022 走看看