Java-JDBC的大数据量的存储
我想编写一个程序,使用键盘输入流,接收一段大文本数据,并将这些数据保存在数据表中。
代码如下:
package jdbc;
import java.io.InputStream;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BigDataJDBC {
public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
public static final String DBURL="jdbc:mysql://localhost:3306/test";
public static final String DBUSER="root";
public static final String DBPASSWORD="123";
private static Connection conn;
private static PreparedStatement pstmt;
private static ResultSet rs;
public static boolean getConnection(){
try{
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
return true;
}catch(Exception e){
return false;
}
}
public static boolean insertDB(int id,InputStream input,int length,String address){
String sql="insert into bigdata(id,contents,picture) values(?,?,?)";
try{
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1,id);
pstmt.setString(3,address);
pstmt.setAsciiStream(2,input,length);
pstmt.executeUpdate();
System.out.println(length);
pstmt.close();
return true;
}catch(Exception e){
return false;
}
}
public static String getInfo(int key,StringBuffer address){
String sql="select contents,picture from bigdata where id=?";
try{
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1,key);
rs=pstmt.executeQuery();
if(rs.next()){
Clob contents=rs.getClob(1);
address.append(rs.getString(2));
String content=contents.getSubString(1,(int)contents.length());
rs.close();
pstmt.close();
return content;
}
else{
rs.close();
pstmt.close();
return "NOT FIND!";
}
}catch(Exception e){
return "ERROR!";
}
}
public static boolean close(){
try{
conn.close();
return true;
}catch(Exception e){
return false;
}
}
}
package test;
import java.io.IOException;
public class BigDataTest {
public static void main(String[] args) throws IOException{
BigDataJDBC.getConnection();
InputStream inputContent=System.in;
int temp=0;
int length=0;
while((temp=inputContent.read())!=-1){
length++;
char c=(char)temp;
if(c=='#'){
break;
}
}
if(BigDataJDBC.insertDB(1, inputContent, length, "abc")){
System.out.println("OK!");
}
else{
System.out.println("FALSE!");
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
楼主,你处理InputStream的方式不对。
while((temp=inputContent.read())!=-1){
length++;
char c=(char)temp;
if(c=='#'){
break;
}
}
这段代码执行结束后,InputStream已经到了输入流的末尾'#'处,这时候再通过JDBC写入数据库已经没有意义了。
推荐使用BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 这种方式来从键盘接收数据。
另外楼上说的对,异常信息应该要打印出来,而不是直接return false。
我觉得你代码哪里错了不重要,但是你的代码里有个很严重的问题:
catch(Exception e){
return false;
}
这种方式叫做吃异常,而且你这里把异常吃的干干净净,一点信息都不输出来,即使是错误了,你自己都找不到问题在哪里。
你把所以的这样的代码改为:
catch(Exception e){
e.printStack();
return false;
}
看看报什么错。