JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Re:如何修改(error:Parameter index out of range) [Re:huangbb12345]
huangbb12345





發文: 19
積分: 0
於 2014-02-07 12:16 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
huangbb12345 wrote:
txt檔空格我已經修改完了,但還是一樣錯誤


我若將程式改成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
package db;
 
import java.io.File;
import java.io.IOException;
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.Scanner;
 
public class jdbcmysql2
{ 
  private Connection con = null; //Database objects 
  //連接object 
  private Statement stat = null; 
  //執行,傳入之sql為完整字串 
  private ResultSet rs = null; 
  //結果集 
  private PreparedStatement pst = null; 
  //執行,傳入之sql為預儲之字申,需要傳入變數之位置 
  //先利用?來做標示 
  
  private String dropdbSQL = "DROP TABLE udp2 "; 
  
  private String createdbSQL = "CREATE TABLE udp2 ("+"item INTEGER"+",lifetime VARCHAR(255)"+",count INTEGER)"; 
  
  private String insertdbSQL = "insert into udp2(item,lifetime,count)"+"select ifNULL(max(item),0)+1,?,? FROM udp2 "; 
  
  private String selectSQL = "select * from udp2 "; 
  
  public jdbcmysql2() 
  { 
    try 
    { 
      Class.forName("com.mysql.jdbc.Driver"); 
      //註冊driver 
      con = DriverManager.getConnection( 
          "jdbc:mysql://localhost/udp?useUnicode=true&characterEncoding=Big5","root","test"); 
      //取得connection
 
      //jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=Big5
      //localhost是主機名,test是database名
      //useUnicode=true&characterEncoding=Big5使用的編碼 
      
    } 
    catch(ClassNotFoundException e) 
    { 
      System.out.println("DriverClassNotFound :"+e.toString()); 
    }//有可能會產生sqlexception 
    catch(SQLException x) 
    { 
      System.out.println("Exception :"+x.toString()); 
    } 
    
  } 
  //建立table的方式 
  //可以看看Statement的使用方式 
  public void createTable() 
  { 
    try 
    { 
      stat = con.createStatement(); 
      stat.executeUpdate(createdbSQL); 
    } 
    catch(SQLException e) 
    { 
      System.out.println("CreateDB Exception :" + e.toString()); 
    } 
    finally 
    { 
      Close(); 
    } 
  } 
  //新增資料 
  //可以看看PrepareStatement的使用方式 
  public void insertTable(String item, String lifetime, String count) 
  { 
    try 
    { 
      pst = con.prepareStatement(insertdbSQL); 
      
      //pst.setString(0, item); 
      pst.setString(1, lifetime); 
      pst.setString(2, count); 
      pst.executeUpdate(); 
    } 
    catch(SQLException e) 
    { 
      System.out.println("InsertDB Exception :" + e.toString()); 
    } 
    finally 
    { 
      Close(); 
    } 
  } 
  //刪除Table, 
  //跟建立table很像 
  public void dropTable() 
  { 
    try 
    { 
      stat = con.createStatement(); 
      stat.executeUpdate(dropdbSQL); 
    } 
    catch(SQLException e) 
    { 
      System.out.println("DropDB Exception :" + e.toString()); 
    } 
    finally 
    { 
      Close(); 
    } 
  } 
  //查詢資料 
  //可以看看回傳結果集及取得資料方式 
  public void SelectTable() 
  { 
    try 
    { 
      stat = con.createStatement(); 
      rs = stat.executeQuery(selectSQL); 
      System.out.println("Item\t\tLifetime\t\tCount"); 
      while(rs.next()) 
      { 
        System.out.println(rs.getInt("item")+"\t\t"+ 
            rs.getString("lifetime")+"\t\t"+ rs.getString("count")); 
      } 
    } 
    catch(SQLException e) 
    { 
      System.out.println("DropDB Exception :" + e.toString()); 
    } 
    finally 
    { 
      Close(); 
    } 
  } 
  //完整使用完資料庫後,記得要關閉所有Object 
  //否則在等待Timeout時,可能會有Connection poor的狀況 
  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()); 
    } 
  } 
  
 
  public static void main(String[] args) throws IOException 
  { 
    //測看看是否正常 
    jdbcmysql2 test = new jdbcmysql2(); 
    test.dropTable(); 
    test.createTable(); 
    
    Scanner scan = new Scanner(new File("C:\\Users\\Pao\\Desktop\\udp2_result.txt"));
    while (scan.hasNext())
    {
      String perLine = scan.nextLine().trim();
        String[] dataAry = perLine.split(", ");
 
        //System.out.println(dataAry[0]);
        
             
          test.insertTable(dataAry[0], dataAry[1], dataAry[2]); 
          
          test.SelectTable();
        
    }
    
  
  } 
}

他跑出來的結果lifetime和count皆正確(如下)

Item    Lifetime    Count
1    <1,88069>    177
2    <1,88069>    266
3    <1,88069>    712
4    <79070,88069>    9
5    <1,88069>    423
6    <1,88069>    287
7    <1,88069>    136
8    <1,88069>    98
9    <1,88069>    387
10    <87070,88069>    1
11    <87070,88069>    1
12    <1,88069>    1102
13    <76070,88069>    12
14    <86070,88069>    2
15    <1,88069>    230
16    <1,88069>    156
17    <18070,88069>    70

但如果地84行註解去掉以後,他則又會出現錯誤
InsertDB Exception :java.sql.SQLException: Parameter index out of range (0 < 1 ).
所以感覺現在問題是在第86行不知道為什麼錯@@?
要如何改才能讓item欄位正確存進txt檔中的第一個欄位呢?


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
4868 如何修改(error:Parameter index out of range) huangbb12345 4542 2014-02-06 23:50
4679 Re:如何修改(error:Parameter index out of range) jimwayne 388 2014-02-07 09:52
4705 Re:如何修改(error:Parameter index out of range) lasaka 61 2014-02-07 10:29
4664 Re:如何修改(error:Parameter index out of range) huangbb12345 164 2014-02-07 11:36
4645 Re:如何修改(error:Parameter index out of range) jimwayne 548 2014-02-07 12:00
4687 Re:如何修改(error:Parameter index out of range) lasaka 44 2014-02-07 11:45
4637 Re:如何修改(error:Parameter index out of range) huangbb12345 21 2014-02-07 12:00
4642 Re:如何修改(error:Parameter index out of range) huangbb12345 5249 2014-02-07 12:16
4630 Re:如何修改(error:Parameter index out of range) jimwayne 322 2014-02-07 12:26
4646 Re:如何修改(error:Parameter index out of range) huangbb12345 285 2014-02-07 12:36
4609 Re:如何修改(error:Parameter index out of range) jimwayne 645 2014-02-07 13:09
4601 Re:如何修改(error:Parameter index out of range) javaX 6 2014-02-07 13:12
4597 Re:如何修改(error:Parameter index out of range) alin 42 2014-02-07 13:14
4600 Re:如何修改(error:Parameter index out of range) jimwayne 594 2014-02-07 13:42
4568 Re:如何修改(error:Parameter index out of range) huangbb12345 510 2014-02-07 17:24
4549 Re:如何修改(error:Parameter index out of range) javaX 39 2014-02-07 17:33
4572 Re:如何修改(error:Parameter index out of range) lasaka 208 2014-02-07 17:59
4597 Re:如何修改(error:Parameter index out of range) huangbb12345 272 2014-02-07 18:48
» JWorld@TW »  Java 新手區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8