Java Sqlite代码中的自动增量ID

Java Sqlite代码中的自动增量ID,java,sql,sqlite,Java,Sql,Sqlite,我试图将SQLite与java一起使用,我编写了一段代码,给出了三个字符串 名字 陷阱1 陷阱2 必须填充表 |---------------------| |ID|NAME|SNAME1|SNAME2| |1 |Ale |test |test2 | |---------------------| 如何自动增加ID?我尝试在创建表时使用auto_increment,但在填充表时出现异常,因此我正在寻找一种好方法 从代码中可以看出,每次执行程序时,我只能插入

我试图将SQLitejava一起使用,我编写了一段代码,给出了三个字符串

  • 名字
  • 陷阱1
  • 陷阱2
必须填充表

    |---------------------|
    |ID|NAME|SNAME1|SNAME2|
    |1 |Ale |test  |test2 |
    |---------------------|
如何自动增加ID?我尝试在创建表时使用auto_increment,但在填充表时出现异常,因此我正在寻找一种好方法

从代码中可以看出,每次执行程序时,我只能插入一行

package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

/**
 *
 * @author MITROTTA
 */
public class Database {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws SQLException {

        Connection c = null;
        Statement stmt = null;
        String sql;

        //Variabili Database
        String name;
        String sname1, sname2;

        Scanner in = new Scanner(System.in);

        try {
            Class.forName("org.sqlite.JDBC");
            c = DriverManager.getConnection("jdbc:sqlite:test.db");
            c.setAutoCommit(false);
            System.out.println("Opened database successfully");

            //Creazione tabella
            stmt = c.createStatement();
            sql = "CREATE TABLE IF NOT EXISTS COMPANY " +
                   "(ID INT PRIMARY KEY     NOT NULL," +
                   " NAME          CHAR(30)    NOT NULL, " + 
                   " SNAME1         CHAR(30)    NOT NULL, " + 
                   " SNAME2        TEXT)"; 
            stmt.executeUpdate(sql);

            System.out.print("Type name: ");
            name = in.nextLine();
            System.out.print("Type sname1: ");
            sname1 = in.nextLine();
            System.out.print("Type sname2: ");
            sname2 = in.nextLine();

            sql = "INSERT INTO COMPANY (ID,NAME,SNAME1,SNAME2) " +
                   "VALUES (2, '" + name + "','" + sname1 + "','" + sname2 + "');"; 
            stmt.executeUpdate(sql);

            ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );
            while ( rs.next() ) {
                int id = rs.getInt("ID");
                String  name1 = rs.getString("NAME");
                String name2  = rs.getString("SNAME1");
                String  name3 = rs.getString("SNAME2");

                System.out.println( "ID = " + id );
                System.out.println( "Name = " + name1 );
                System.out.println( "SName1 = " + name2 );
                System.out.println( "SName3 = " + name3 );
                System.out.println();
            }

            rs.close();
            stmt.close();
            c.commit();
            c.close();
        } catch ( Exception e ) {
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
            System.exit(0);
        }
    System.out.println("Table created successfully");
    }
}

插入时只需使用
NULL
值而不是
id
,您可能不应该将其声明为
notnull


来源:

插入时只需使用
NULL
值而不是
id
,可能您不应该将其声明为
非NULL

来源:

若要获取,需要将其声明为
整数主键
(而不是
INT

然后,您可以只插入一个空值,或者从insert语句中省略该列。

若要获得一个值,您需要将其声明为
整数主键(而不是
INT


然后,您可以只插入一个空值,或者从insert语句中省略该列。

在insert use
rowid
中,而不是
2
。在insert use
rowid
中,而不是
2