在線求高手解答(注:數據庫入門新手)

时间:2022-03-20 07:12:55
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;
import java.sql.Statement;
import java.sql.ResultSet;
import java.io.*;
public class BlobDemo{
//定義MYSQL的數據庫驅動程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
//定義MYSQL的數據庫的連接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn";
//MYSQL數據庫的連接用戶名
public static final String DBUSER = "root";
//MYSQL數據庫的連接密碼
public static final String DBPASS = "mysqladmin";
public static void main(String args[]) throws Exception{
Connection conn = null; //數據庫連接
PreparedStatement pstmt = null; //數據庫的操作,預處理
String name = "任我行";
String sql = "INSERT INTO userblob(name,photo) VALUES (?,?)";
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
pstmt = conn.prepareStatement(sql);
File file = new File("d:" + File.separator + "大对象.jpg");
InputStream in = new FileInputStream(file);
pstmt.setString(1, name);
pstmt.setBinaryStream(2, in, (int)file.length());
pstmt.executeUpdate();
pstmt.close(); //這句報異常
conn.close();

}
}

14 个解决方案

#1


什么错误,log

#2


你的代码都不处理异常。。。

#3


错误信息。。

#4


public class Test2 {


 /**
 * @param args
 */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  //定义需要的对象
  PreparedStatement ps=null;
  ResultSet rs=null;
  Connection ct=null;
  
  try{
   
   //加载驱动
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   //得到连接
   ct=DriverManager.getConnection("jdbc:odbc:hello","sa","123");
   
   //创建ps
//   ps=ct.prepareStatement("select * from stu");
//   rs=ps.executeQuery();
//   while(rs.next())
//   {
//    System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+" "+rs.getInt(4)+" "+rs.getString(5)+" "+rs.getString(6));
//   }
   
   //添加数据使用PreparedStatement
   ps=ct.prepareStatement("insert into stu values(?,?,?,?,?,?)");
   ps.setString(1, "006");
   ps.setString(2, "不会");
   ps.setString(3, "女");
   ps.setInt(4, 55);
   ps.setString(5, "006");
   ps.setString(6, "006");
   //执行
   int i=ps.executeUpdate();
   if(i==1)
   {
    System.out.println("添加成功");
   }else
   {
    System.out.println("添加不成功");
   }
  }catch(Exception e)
  {
   e.printStackTrace();
  }finally{
   //关闭资源
   try{
    if(rs!=null)
    {
     rs.close();
    }
    if(ps!=null)
    {
     ps.close();
    }
    if(ct!=null)
    {
     ct.close();
    }
   }
   catch(Exception e){
    e.printStackTrace();
   }
  }
  
 }


}

一个例子,lz自己看看

#5


现在繁体字比较时髦?

#6


引用 5 楼 gukuitian 的回复:
现在繁体字比较时髦?


也许不是大陆人。。。

#7


Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[?\0??|?÷?\'?y??§?SQ]-????gg?“?2y5?^(?~?à??k???o?é6ê[?—?p2~¤Wó?qà+?|?\'' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
at BlobDemo.main(BlobDemo.java:30)
貌似是二進制讀取圖片錯誤,看的視頻,視頻上的能運行,我的不行

#8


InputStream in = new FileInputStream(file);
pstmt.setString(1, name);
pstmt.setBinaryStream(2, in, (int)file.length());

很少这样存,
我觉得pstmt.setBinaryStream(2, in, (int)file.length()); 有问题!

#9


错误信息指明有语法问题。

#10


引用 8 楼 tiehou 的回复:
InputStream in = new FileInputStream(file);
pstmt.setString(1, name);
pstmt.setBinaryStream(2, in, (int)file.length());

很少这样存,
我觉得pstmt.setBinaryStream(2, in, (int)file.length()); 有问题!




使用此方法讀取大文本數據可以,讀圖片就報錯

#11


估计是乱码问题

#12


注释都给去掉

#13


引用 10 楼 newinternational 的回复:
引用 8 楼 tiehou 的回复:

InputStream in = new FileInputStream(file);
pstmt.setString(1, name);
pstmt.setBinaryStream(2, in, (int)file.length());

很少这样存,
我觉得pstmt.setBinaryStream(2, in, (int)file.len……


要是存储大文本情有可原,但是存储图片有点不应该,如果一个图片上M了,如果是大系统上没有多久数据库该崩溃了。
一般图片之类的文件,如果没有特殊的需求的话,最好存路径就可以。

#14


File file = new File("d:" + File.separator + "大对象.jpg");
这句 好像有问题 
看看":"是中文状态下还是英文状态下的 
你的数据库 支持不支持 中文  如果 不支持中文 大对象 到了数据库中直接是乱码,也许会报出语法错误的异常来

#1


什么错误,log

#2


你的代码都不处理异常。。。

#3


错误信息。。

#4


public class Test2 {


 /**
 * @param args
 */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  //定义需要的对象
  PreparedStatement ps=null;
  ResultSet rs=null;
  Connection ct=null;
  
  try{
   
   //加载驱动
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   //得到连接
   ct=DriverManager.getConnection("jdbc:odbc:hello","sa","123");
   
   //创建ps
//   ps=ct.prepareStatement("select * from stu");
//   rs=ps.executeQuery();
//   while(rs.next())
//   {
//    System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+" "+rs.getInt(4)+" "+rs.getString(5)+" "+rs.getString(6));
//   }
   
   //添加数据使用PreparedStatement
   ps=ct.prepareStatement("insert into stu values(?,?,?,?,?,?)");
   ps.setString(1, "006");
   ps.setString(2, "不会");
   ps.setString(3, "女");
   ps.setInt(4, 55);
   ps.setString(5, "006");
   ps.setString(6, "006");
   //执行
   int i=ps.executeUpdate();
   if(i==1)
   {
    System.out.println("添加成功");
   }else
   {
    System.out.println("添加不成功");
   }
  }catch(Exception e)
  {
   e.printStackTrace();
  }finally{
   //关闭资源
   try{
    if(rs!=null)
    {
     rs.close();
    }
    if(ps!=null)
    {
     ps.close();
    }
    if(ct!=null)
    {
     ct.close();
    }
   }
   catch(Exception e){
    e.printStackTrace();
   }
  }
  
 }


}

一个例子,lz自己看看

#5


现在繁体字比较时髦?

#6


引用 5 楼 gukuitian 的回复:
现在繁体字比较时髦?


也许不是大陆人。。。

#7


Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[?\0??|?÷?\'?y??§?SQ]-????gg?“?2y5?^(?~?à??k???o?é6ê[?—?p2~¤Wó?qà+?|?\'' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
at BlobDemo.main(BlobDemo.java:30)
貌似是二進制讀取圖片錯誤,看的視頻,視頻上的能運行,我的不行

#8


InputStream in = new FileInputStream(file);
pstmt.setString(1, name);
pstmt.setBinaryStream(2, in, (int)file.length());

很少这样存,
我觉得pstmt.setBinaryStream(2, in, (int)file.length()); 有问题!

#9


错误信息指明有语法问题。

#10


引用 8 楼 tiehou 的回复:
InputStream in = new FileInputStream(file);
pstmt.setString(1, name);
pstmt.setBinaryStream(2, in, (int)file.length());

很少这样存,
我觉得pstmt.setBinaryStream(2, in, (int)file.length()); 有问题!




使用此方法讀取大文本數據可以,讀圖片就報錯

#11


估计是乱码问题

#12


注释都给去掉

#13


引用 10 楼 newinternational 的回复:
引用 8 楼 tiehou 的回复:

InputStream in = new FileInputStream(file);
pstmt.setString(1, name);
pstmt.setBinaryStream(2, in, (int)file.length());

很少这样存,
我觉得pstmt.setBinaryStream(2, in, (int)file.len……


要是存储大文本情有可原,但是存储图片有点不应该,如果一个图片上M了,如果是大系统上没有多久数据库该崩溃了。
一般图片之类的文件,如果没有特殊的需求的话,最好存路径就可以。

#14


File file = new File("d:" + File.separator + "大对象.jpg");
这句 好像有问题 
看看":"是中文状态下还是英文状态下的 
你的数据库 支持不支持 中文  如果 不支持中文 大对象 到了数据库中直接是乱码,也许会报出语法错误的异常来