Sqlite:未实现驱动和乱码问题解决
《Sqlite:未实现驱动和乱码问题解决》要点: 1、sqlite默认使用UTF-8编码,从数据库(UTF-8)查出来的时候遍历ResultSet时候一定使用:rs.getBytes(columnName),不能使用re.getString(XXX) public static String resultSetToJson(ResultSet rs) throws SQLException,JSONException,UnsupportedEncodingException { // json数组 JSONArray array = new JSONArray(); // 获取列数 ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); // 遍历ResultSet中的每条数据 while (rs.next()) { JSONObject jsonObj = new JSONObject(); // 遍历每一列 for (int i = 1; i <= columnCount; i++) { String value = null; String columnName = metaData.getColumnLabel(i);//列名称 if (rs.getString(columnName) != null&&!rs.getString(columnName).equals("")) { value = new String(rs.getBytes(columnName));//列的值,有数据则转码 } else { value = "";//列的值,为空,直接取出去 } jsonObj.put(columnName,value);} array.add(jsonObj); } return array.toString();} 2、Sqlite报错 not implemented by SQLite JDBC driver,参照下面代码解决 /**执行插入和更改操作,无返回ResultSetpublic static void updateUser() throws Exception { String rs = SqliteDB.GetHtttpLink("http://127.0.0.1:18181/db/upuser"); JSONArray array = JSONArray.parseArray(rs); for (int i = 0; i < array.size(); i++) { JSONObject obj = array.getJSONObject(i); int id = Integer.parseInt(obj.getString("id")); String sql = "insert into user values(?,?,?)"; Connection con = SqliteDB.getCon(); PreparedStatement pst = con.prepareStatement(sql); pst.setInt(1,id); pst.addBatch();//注意此种形式可以解决报错 pst.executeBatch(); }}注意此种形式可以解决报错 /**执行查询操作 public static void selectUser() throws SQLException {Connection connection = SqliteDB.getCon(); PreparedStatement pst = connection.prepareStatement("select comment from user;"); ResultSet resultSet = pst.executeQuery();//后面这个不能带sql while (resultSet.next()) { String s = resultSet.getString("comment"); }} 欢迎参与《Sqlite:未实现驱动和乱码问题解决》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |