-1

ユーザーが作成するテーブルがインクリメントされるたびに自動インクリメント関数を作成しようとしていますDepartmenent_id(varchar).A1、A2 .....を指定したIDなので、結果取得のリストを使用するautoincrement()からselect Dept_id from Department 整数部分を分離し、TreeSetコレクションに追加して最大の要素を取り出し、文字列の最初の部分に追加しようとしますが、文字列の部分文字列を取り出して9整数に解析すると問題が発生しnumber format exceptionます。関数コードがここにあるのに、なぜこの問題が発生するのですか

    private String autoIncreament() {
    String id = null;
    String num = null;
    String result = "SELECT DEPARTMENT_ID FROM  Department";
    TreeSet<Integer> treeSet = new TreeSet<Integer>();
    List<Map<String, Object>> result1 = getJdbcTemplate().queryForList(
            result);
    for (Map<String, Object> map : result1) {
        id = (String) map.get("DEPARTMENT_ID");
        System.out.println("id=" + id);
        num = id.substring(1);
        int number = Integer.parseInt(num);
        treeSet.add(number);

    }

    Integer in = treeSet.pollLast();
             int c=in.intValue();
               c++;
    id = id +c ;
    /* System.out.println("jcak="+rowSet.getRow()); */
    return id;
}

私の例外の詳細

    19 Dec, 2012 11:25:14 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5d764be1: startup date [Wed Dec 19 11:25:14 IST 2012]; root of context hierarchy
19 Dec, 2012 11:25:14 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [mybeans.xml]
19 Dec, 2012 11:25:14 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@7b5a6029: defining beans [dataSource,employeeDaoImpl,departmentdao]; root of factory hierarchy
19 Dec, 2012 11:25:14 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
ankur=com.nousinfo.tutorial.employee.model.Department@7eb1cc87
id=9
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.nousinfo.tutorial.employee.dao.impl.DepartmentDAOImpl.autoIncreament(DepartmentDAOImpl.java:113)
    at com.nousinfo.tutorial.employee.dao.impl.DepartmentDAOImpl.getDepartment(DepartmentDAOImpl.java:47)
    at AccessClass.main(AccessClass.java:34)
4

5 に答える 5

1

これが NumberFormatException の原因となっている行である可能性があります。

int number = Integer.parseInt(num);

何が問題なのかを確認する最も簡単な方法は、numこの行の前に表示することです。これは数値ではない可能性があります。

編集 (質問が変更された後) - 空の文字列 ("") は整数に変換できません。

余談ですが、深刻なユースケース/アプリケーションのジェネレーターを識別できます。

于 2012-12-19T05:51:23.223 に答える
0

例外はそれをすべて言います:

スレッド"main"の例外java.lang.NumberFormatException:入力文字列の場合: ""

空の文字列をintに解析しようとしています

入力文字列9で、インデックス1からサブ文字列を取得している場合は、空の文字列を取得しています

于 2012-12-19T05:54:07.030 に答える
0

問題は、プレフィックス付きのシーケンス番号をコミットしていないことです。単に次のロジックがこれを助けるかもしれません

  1. テーブルの行数を取得Departmentする"select count(*) from department"
  2. それからreturn "A"+(numberOfRows+1) ;
于 2012-12-19T06:09:07.267 に答える
0

通常の jdbc を使用している場合、Java はキーを読み取るためのサポートを提供しています。

connection = getConnection();
String sql = "insert into table1 (col1,Rcol2) values (?, ?)";
ps = connection.prepareStatement(sql, new String[] {"colKEY"});
ps.setString(1, col1Val);
ps.setString(2, col2Val);
ps.executeUpdate();     

rs = ps.getGeneratedKeys();
if (rs.next()){
    colKey = new Integer(rs.getInt(1));
}
connection.commit();

これが役立つことを願っています。

于 2012-12-19T05:52:11.737 に答える
0
 num = id.substring(1);

it shows start index from 1. If your value is "7" then it will get "".

それと変更

  num = id.substring(0);         

 try{
       int number = Integer.parseInt(num);

 } catch (NumberFormatException ex) {
   ex.printStackTrace();
  }
于 2012-12-19T05:57:46.557 に答える