[問題] 資料數值寫不進資料表

對專題的經驗分享、心得、閒聊等

版主: rachel

分享到: Facebook

[問題] 資料數值寫不進資料表

文章mmsssm2233223 » 週六 9月 03, 2011 5:25 pm

你好,我想請問

我以java寫了一個程式,我以java讀取多個txt文件,每當讀取一個txt文件內的值,就寫入mysql一筆資料(在同一個資料表下)

以下假設我以4個文件去測試,以下從A-D依序寫入

A.txt 200個值
B.txt 300個值
C.txt 500個值
D.txt 300個值

這時在寫入D.txt檔案時,疑似只能寫入100個值,剩下的寫不進資料表,但讀取txt文件的程式持續在跑,但就是無法寫入

以下假設我以4個文件去測試,以下從A-D依序寫入

A.txt 200個值
B.txt 100個值
C.txt 350個值
D.txt 250個值

這次測試可以完整寫入,並結束讀取程式


不知道是不是因為資料表無法寫入太多的資料筆數,導致後面的值寫不進去,還是我們的程式碼有問題


但查詢總寫入資料數值與欲寫入的資料數相同
以下為程式碼,請教各位了,謝謝


static public Connection con = null;
static public Statement stat = null;
static public ResultSet rs = null;
static public PreparedStatement pst = null;
static public String insertdbSQL = "insert into tf(term,doc,count,tf,weight) " + "values(?,?,?,?,?)";

...

static public void insertTable( String term,String doc , String count,String tf,String weight)
{
try
{
pst = con.prepareStatement(insertdbSQL);

pst.setString(1, term);
pst.setString(2, doc);
pst.setString(3, count);
pst.setString(4, tf);
pst.setString(5, weight);
pst.executeUpdate();
}
catch(SQLException e)
{
System.out.println("InsertDB Exception :" + e.toString());
}
finally
{
Close();
}
}

static public void SetCon(){
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=Big5"," "," ");
}
catch(ClassNotFoundException e)
{
System.out.println("DriverClassNotFound :"+e.toString());
}
catch(SQLException x) {
System.out.println("Exception :"+x.toString());
}
}

static private void Close()
{
try
{
if(rs!=null)
{
rs.close();
rs = null;
}
if(stat!=null)
{
stat.close();
stat = null;
}
if(pst!=null)
{
pst.close();
pst = null;
}
}
catch(SQLException e)
{
System.out.println("Close Exception :" + e.toString());
}
}


中間略過....


SetCon();
for (int q=0;q<list.size();q++)
{
.......
//tf test = new tf();
insertTable(list.get(q), fn , sum, dotf , "" );
}
mmsssm2233223
剛學走路的小朋友
 
文章: 2
註冊時間: 週六 9月 03, 2011 3:07 pm

Re:[問題] 資料數值寫不進資料表

文章benwu » 週三 9月 07, 2011 4:09 pm

我以前遇過類似的問題,有兩種情況:
1.是因為資料的問題 (應該是數字,結果卻是空白...)
2.Connection沒有close掉,資料在cache裡,被rollback回去...

看起來你的問題比較像2...
我不是大吳老師,也不是小吳老師,我是Ben老師
我的部落格
http://eportfolio.fju.edu.tw/053792
頭像
benwu
資管系教師
 
文章: 645
註冊時間: 週二 4月 20, 2004 4:17 pm
來自: 輔大資管系

Re:[問題] 資料數值寫不進資料表

文章ghost3401 » 週四 9月 08, 2011 2:24 am

代碼: 選擇全部
static public Connection con = null;
static public Statement stat = null;
static public ResultSet rs = null;
static public PreparedStatement pst = null;
static public String insertdbSQL = "insert into tf(term,doc,count,tf,weight) " + "values(?,?,?,?,?)";

...

static public void insertTable( String term,String doc , String count,String tf,String weight)
{
    try
    {
        pst = con.prepareStatement(insertdbSQL);
        pst.setString(1, term);
        pst.setString(2, doc);
        pst.setString(3, count);
        pst.setString(4, tf);
        pst.setString(5, weight);
        pst.executeUpdate();
    }
    catch(SQLException e)
    {
        System.out.println("InsertDB Exception :" + e.toString());
    }
    finally
    {
        Close();
    }
}

static public void SetCon(){
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=Big5"," "," ");
    }
    catch(ClassNotFoundException e)
    {
        System.out.println("DriverClassNotFound :"+e.toString());
    }
    catch(SQLException x)
    {
        System.out.println("Exception :"+x.toString());
    }
}

static private void Close()
{
    try
    {
        if(rs!=null)
        {
            rs.close();
            rs = null;
        }
        if(stat!=null)
        {
            stat.close();
            stat = null;
        }
        if(pst!=null)
        {
            pst.close();
            pst = null;
        }
    }
    catch(SQLException e)
    {
        System.out.println("Close Exception :" + e.toString());
    }
}


中間略過....

SetCon();
for (int q=0;q<list.size();q++)
{
    .......
    //tf test = new tf();
    insertTable(list.get(q), fn , sum, dotf , "" );
}



幫你整理一下程式碼...

我跟老師看法一樣,你的Connection物件沒有close喔! 只有rs, pst, stat有釋放
然後你這樣會開關資料庫數百次...不曉得是不是這樣也會影響造成問題?

或許可以兜成這樣的sql句子

代碼: 選擇全部
insert into table values (第一組資料), (第二組資料), (第n-1組), (第n組資料)


然後一次寫入資料庫。
ghost3401
繼續深造的研究生
 
文章: 473
註冊時間: 週四 9月 07, 2006 9:07 am
來自: 基隆偏遠地帶

Re:[問題] 資料數值寫不進資料表

文章mmsssm2233223 » 週六 9月 17, 2011 12:56 pm

謝謝二位的回覆
試用你們的建議後問題已經解決了
真的非常感謝二位 :razz:
mmsssm2233223
剛學走路的小朋友
 
文章: 2
註冊時間: 週六 9月 03, 2011 3:07 pm


回到 專題經驗交流

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 2 位訪客

cron