Вставить данные в таблицу sqlite Java - PullRequest
0 голосов
/ 17 февраля 2019

У меня проблемы с вставкой данных в таблицу sqlite.Я хочу вставить переменные в столбцы вместо фиксированных данных

Fixed data:
"INSERT INTO DATOS (ID,NOMBRE,GRUPO,TUTOR) " +
                "VALUES (1, 'Paul', 32, 'California');";

That i want:
"INSERT INTO DATOS (ID,NOMBRE,GRUPO,TUTOR) " +
                "VALUES (variableID, variableName, variableNumber, variableCity);";

Я читаю документацию, но не могу ее получить, не могли бы вы мне помочь, пожалуйста.На данный момент мне удалось создать базу данных и вставить данные вручную:

package com.proyecto.demo;

import java.sql.*;

public class SQLiteJDBC {
public static void main( String args[] ) {
  Connection c = null;
  Statement stmt = null;

  try { // Create the table
     Class.forName("org.sqlite.JDBC");
     c = DriverManager.getConnection("jdbc:sqlite:test.db");
     System.out.println("Paso 1: Base de datos creada");

     stmt = c.createStatement();
     String sql = "CREATE TABLE DATOS " +
                    "(ID INT PRIMARY KEY     NOT NULL," +
                    " NOMBRE           TEXT    NOT NULL, " + 
                    " GRUPO            TEXT     NOT NULL, " + 
                    " TUTOR        INT)"; 
     stmt.executeUpdate(sql);
     stmt.close();
     c.close();
  } catch ( Exception e ) {
     System.err.println( e.getClass().getName() + ": " +  e.getMessage() );
     System.exit(0);
  }

  try { // Insert date to the table (here is where i have problems)
    System.out.println("Paso 2: Conectar Base de datos");
     Class.forName("org.sqlite.JDBC");
     c = DriverManager.getConnection("jdbc:sqlite:test.db");
     c.setAutoCommit(false);
     System.out.println("Opened database successfully");

     stmt = c.createStatement();
     String sql = "INSERT INTO DATOS (ID,NOMBRE,GRUPO,TUTOR) " +
                    "VALUES (1, 'Paul', 32, 'California');"; 
     stmt.executeUpdate(sql);

     stmt.close();
     c.commit();
     c.close();
  } catch ( Exception e ) {
     System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     System.exit(0);
  }
  System.out.println("All inserted!");
 }
}

PD: Один пользователь предложил мне использовать сценарий SQL для выполнения моей задачи, а другой сказал мне использовать «готовое заявление».что лучше?

1 Ответ

0 голосов
/ 17 февраля 2019

Вы должны использовать PreparedStatement. Кроме того, после Java-8 настоятельно рекомендуется обрабатывать подключения к базе данных как AutoClosables .Вы можете прочитать Заявление о попытках с ресурсами , чтобы узнать, как это сделать.Наконец, не используйте класс Exception для перехвата исключений.Поймайте вид исключения, которое вы получите в большинстве случаев, которое в вашем случае составляет SQLException.

Вот полный пример вещей, упомянутых выше:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class SQLiteSample {
    private static final String URL = "jdbc:sqlite:data.db";

    public static void main(String[] args) {
        createDb();
        createTable();
        insertPerson("Thomas", 15);
        insertPerson("Walter", 32);
    }

    private static void insertPerson(String name, int age) {
        final String SQL = "INSERT INTO persons VALUES(?,?)";
        try (Connection con = getConnection(); PreparedStatement ps = con.prepareStatement(SQL);) {
            ps.setString(1, name); // First question mark will be replaced by name variable - String;
            ps.setInt(2, age); // Second question mark will be replaced by name variable - Integer;
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void createTable() {
        final String SQL = "CREATE TABLE IF NOT EXISTS persons (name TEXT, age INTEGER);";
        // This SQL Query is not "dynamic". Columns are static, so no need to use
        // PreparedStatement.
        try (Connection con = getConnection(); Statement statement = con.createStatement();) {
            statement.executeUpdate(SQL);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void createDb() {
        try (Connection conn = getConnection()) {
            if (conn != null) {
                conn.getMetaData();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...