我想把一个文件存入数据库代码如下:public void saveArticles(){
checkConn();
String sql="insert into articles (article,time,zuoze) values(?,?,?)";
System.out.println(new Date().getTime());

File f=new File("src/net/BaseDao.java");
Reader rd=null;
try {
rd=new BufferedReader(new FileReader(f));

} catch (FileNotFoundException e) {
e.printStackTrace();
}

int num=exeUpdt(sql, new Object[]{rd,new java.sql.Timestamp(new Date().getTime()),"bbs02"});
if(num==1){
System.out.println("成功传入了一条数据");
}else{
System.out.println("插入失败!");
}

closer();
}
exeUpdt方法代码如下:public int exeUpdt(String sql,Object[] params){
int count=0;
try {
pstmt= conn.prepareStatement(sql);
if(params !=null){
for(int i=0;i<params.length;i++){
if(params[i] instanceof Reader){
pstmt.setCharacterStream(i+1, (Reader) params[i]);
continue;
}
pstmt.setObject(i+1, params[i]);

}
}
count= pstmt.executeUpdate();
} catch (SQLException e) {
                           e.printStackTrace();
}

return count;
}pstmt.setCharacterStream(i+1, (Reader) params[i])
在JUNIT4测试时不通过pstmt.setCharacterStream(i+1, (Reader) params[i]);java.lang.AbstractMethodError: net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setCharacterStream(ILjava/io/Reader;)V
at net.BaseDao.exeUpdt(BaseDao.java:48)
at net.Manager.saveArticles(Manager.java:114)
at test.ManageTest.saveTest(ManageTest.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)请问该如何修改呢

解决方案 »

  1.   

    字符格式问题 setCharacterStream
      

  2.   

    调试一下程序,看看
    pstmt.setCharacterStream(i+1, (Reader) params[i]);
      

  3.   


    net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setCharacterStream(ILjava/io/Reader;)V 是不是类型转换错误?
      

  4.   

    对于大文本串全部的读或者取,全部使用InputStream字节流,不要使用Reader字符流,字节流是通用的
      

  5.   

    java.lang.AbstractMethodError: //抽象方法错误!LZ的方法是:
    net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setCharacterStream(ILjava/io/Reader;)参考:
    http://jtds.sourceforge.net/doc/net/sourceforge/jtds/jdbc/JtdsPreparedStatement.html
    的方法第一次接触这样的存储问题。
    期待高手
      

  6.   


    public class IniTest {
    private Connection conn;
    private Statement st;
    private PreparedStatement pstatement;
    private String driver;
    private String url;
    private String user;
    private String password; public void initParma(String paramFile) {
    Properties pro = new Properties();
    try {
    pro.load(new FileInputStream(paramFile));
    driver = pro.getProperty("driver");
    url = pro.getProperty("url");
    password = pro.getProperty("password");
    user = pro.getProperty("user");
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } public void createTable() {
    try {
    Class.forName(driver);
    conn = DriverManager.getConnection(url, user, password);
    File file = new File("d:/1.txt");
    FileInputStream fis = new FileInputStream(file);
    pstatement = conn.prepareStatement("insert into text_table values(null,?,?)");
    pstatement.setString(1, "书名");
    pstatement.setBinaryStream(2, fis, (int) file.length());
    int count=pstatement.executeUpdate();
    System.out.println("插入了"+count+"条数据");

    } catch (SQLException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (pstatement != null) {
    try {
    pstatement.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if (conn != null) {
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    } public static void main(String[] args) {
    IniTest iniTest = new IniTest();
    iniTest.initParma("d:/mysql.ini");
    iniTest.createTable();
    }}属性文件mysql.ini没有给出