• JDBC中的批量插入和乱码解决


    字符集-乱码问题

    用JDBC访问MySql数据库的时候,如果JDBC使用的字符集和MySql使用的字符集不一致,那么会导致乱码发生。解决办法当时是在使用JDBC的时候指定和数据库一样的字符集。我们可以在DB_URL字符串后加上”?characterEncoding=XXX”的方式指定JDBC使用的字符集。

    同时,我们需要知道MySql中使用的字符集,可以通过以下两个命令获取。

    1)      show variables like '%character%';获取数据库或者整个服务器使用的字符集。

    可以看到,上面截图显示笔者整个数据库服务器以及当前数据库使用的都是GBC编码。

    2)      show create table user; 获取user表使用的字符集

    上面截图显示当前user表使用的字符集也是gbk。其实,我们还可以对每一个列设置字符集。

    那么这几个级别的字符集,到底用的哪一个呢?其实他们是有优先级的:

    Column> Table> Database > Server

    批量插入问题

    有些时候我们需要向数据库中插入一大批数据,如果单纯的使用普通SQL语句一条一条向数据库插入呢效率会非常慢。这个时候我们就可以利用Statement的批量插入数据接口来实现功能。

    示例代码:

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;

    import java.util.ArrayList;

    import java.util.List;

    class User

    {

         private String userid;

         private String name;

         private String password;

        

        

         public User(String userid, String name, String password)

         {

               this.setUserid(userid);

               this.setName(name);

               this.setPassword(password);

         }

        

         public String getUserid()

         {

               return userid;

         }

         public void setUserid(String userid)

         {

               this.userid = userid;

         }

         public String getName()

         {

               return name;

         }

         public void setName(String name)

         {

               this.name = name;

         }

         public String getPassword()

         {

               return password;

         }

         public void setPassword(String password)

         {

               this.password = password;

         }

    }

    public class Hello

    {

         static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";

         static String DB_URL = "jdbc:mysql://localhost:3306/mldn";

         static final String USERNAME = "root";

         static final String PASSWORD = "admin";

        

        public static void main(String a[]) 

        {

        Connection conn = null;

        Statement stmt = null;

        ResultSet rs = null;

        List<User> listUser = Hello.getUser();

       

        try

               {

               //加载驱动

                    Class.forName(JDBC_DRIVER);

                    //获取链接

                    DB_URL += "?characterEncoding=gbk";

                    conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);

                    //执行SQL语句

                    stmt = conn.createStatement();

                    for(User item : listUser)

                    {

                         stmt.addBatch("INSERT INTO user(userid,name,password) VALUES('"+item.getUserid()+"','"+item.getName()+"','"+item.getPassword()+"');");

                    }

                    stmt.executeBatch();

                    stmt.clearBatch();

               }

        //异常处理

        catch (ClassNotFoundException e)

               {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

               } catch (SQLException e)

               {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

               }

        finally

        {

               //资源清理

                    try

                    {

                         conn.close();

                         stmt.close();

                         rs.close();

                    }

                    catch(Exception e)

                    {

                         //ignore exceptions when closing.

                    }

               }

       

       

       

        System.out.println("///Done~~");

        }

       

        public static List<User> getUser()

        {

        List<User> userList = new ArrayList<User>();

        userList.add(new User("cyx", "陈奕迅", "cyx999"));

        userList.add(new User("zjl", "ZHOU JIELUN", "zjl123"));

        userList.add(new User("cjk", "苍井空", "cjk520"));

        userList.add(new User("ly", "LIU YAN", "ly1988"));

       

        return userList;

        }

    }

  • 相关阅读:
    668. Kth Smallest Number in Multiplication Table
    658. Find K Closest Elements
    483. Smallest Good Base
    475. Heaters
    454. 4Sum II
    441. Arranging Coins
    436. Find Right Interval
    410. Split Array Largest Sum
    392. Is Subsequence
    378. Kth Smallest Element in a Sorted Matrix
  • 原文地址:https://www.cnblogs.com/kuillldan/p/5864262.html
Copyright © 2020-2023  润新知