Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313

SQLite INSERT в таблицу

02.02.2013, 20:12. Показов 4899. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравстуйте, товарищи форумчане! Ознакамливаюсь с бд, свой выбор пока остановил на SQLite, пробую создать бд книг, но при вставке элемента в таблицу происходит ошибка! Что делаю не так?

Java
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
package com.sevak_avet;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
 
 
public class SQLiteDB {
    protected static Connection c = null;
    protected static java.sql.Statement s = null;
    
    protected static String url = "jdbc:sqlite:mydb";
    protected static String name = "Sevak";
    protected static String pass = "123";
    protected static String createTable = 
            "CREATE TABLE IF NOT EXISTS books(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, author TEXT NOT NULL, name TEXT NOT NULL)";
        
    public void insertValue(String author, String name) throws SQLException{
        StringBuilder sql = new StringBuilder();
        sql.append("INSERT INTO books (author, name) VALUES (").append(author).append(", ").append(name).append(")");
        System.out.println(sql.toString());
        
        s.executeUpdate(sql.toString());
    }
    
    public void printTable() throws SQLException{
        ResultSet rs = s.executeQuery("select * from books");
        while(rs.next()){
            int id = rs.getInt("id");
            String author = rs.getString("author");
            String name = rs.getString("name");
            
            StringBuilder out = new StringBuilder();
            out.append(id).append(author).append(name);
            
            System.out.println(out.toString());
        }
    }
    
    public void clearTable() throws SQLException{
        s.executeUpdate("delete from books");
        System.err.println("Database cleared!\n");
    }
    
    public static void main(String[] args) throws SQLException {
        try {
            Class.forName("org.sqlite.JDBC");
            System.out.println("Driver loading is succsess!\n");
            
            c = DriverManager.getConnection(url, name, pass);
            System.out.println("Connected!");
            
            s = c.createStatement();
            System.out.println("Statement created!\n");
            
            s.executeUpdate(createTable);
            
            SQLiteDB db = new SQLiteDB();
            db.insertValue("Пушкин", "Евгений Онегин");
            
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(c!=null){
                c.close();
                System.out.println("Connection closed!");
            }
            if(s!=null){
                s.close();
                System.out.println("Statement closed!");
            }
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Driver loading is succsess!
 
Connected!
Statement created!
 
INSERT INTO books (author, name) VALUES (Пушкин, Евгений Онегин)
java.sql.SQLException: near "Онегин": syntax error
    at org.sqlite.NativeDB.throwex(NativeDB.java:210)
    at org.sqlite.NativeDB._exec(Native Method)
    at org.sqlite.Stmt.executeUpdate(Stmt.java:152)
    at com.sevak_avet.SQLiteDB.insertValue(SQLiteDB.java:23)
    at com.sevak_avet.SQLiteDB.main(SQLiteDB.java:59)
Connection closed!
Statement closed!
Добавлено через 27 минут
Нашел свою ошибку, в 20 строке, заменить на
Java
1
sql.append("INSERT INTO books (author, name) VALUES ('").append(author).append("', '").append(name).append("')");
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2013, 20:12
Ответы с готовыми решениями:

Insert триггер в SQLite
Добрый день, подскажите пожалуйста, что делаю не так, есть две таблицы, хочу сделать, что бы при добавлении записи в одной из таблиц,...

SQLite insert in DateTime
Не выходит добавить запись в столбец, тип которого DateTime Сам запрос: insertCommand = "INSERT INTO timeCheck (time)...

SQlite Insert, delete, update
Добрый день. Возник такой вопрос. Есть база с таблицей MailSettings. Она пустая. При первом сохранении настроек, все понятно (Insert). ...

9
Музыка нас Связала
 Аватар для Fonduee
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
02.02.2013, 20:17
Значения должны быть в кавычках:
SQL
1
VALUES ("Пушкин", "Евгений Онегин")
1
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
02.02.2013, 20:22  [ТС]
Fonduee, слушай, а как правильно автоинкремент организовать поля id? у меня сейчас всегда 0
1
Музыка нас Связала
 Аватар для Fonduee
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
02.02.2013, 20:38
Как это в SQLite не могу сказать, но в MySQL задаешь полю 'id' параметры (к примеру):
SQL
1
 `id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
и всё. При добавлении поле 'id' не указываешь, БД сама инкрементирует.
1
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
02.02.2013, 20:43  [ТС]
Полазил в инете, везде пишут делать так:
Java
1
id INTEGER PRIMARY KEY AUTOINCREMENT
, но у меня по прежнему поле id 0, или я дурак и руки кривые, или не там искал
1
Музыка нас Связала
 Аватар для Fonduee
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
02.02.2013, 20:48
AUTOINCREMENT нужно через "подчёркивание" писать. Пример:

Java
1
2
3
4
5
6
7
8
CREATE TABLE `messages` (
  `id` SMALLINT unsigned NOT NULL AUTO_INCREMENT,
 
    ...
 
  PRIMARY KEY (`id`)
  
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Добавлено через 1 минуту
Ой, стоп. Это опять же Mysql
1
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
02.02.2013, 20:53  [ТС]
В любом случае спасибо! Пойду искать дальше!
1
Музыка нас Связала
 Аватар для Fonduee
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
02.02.2013, 21:12
Всё разобрался, принцип тот же. Пример:
Java
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
package sqlite;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
 
public class SqliteTest
{
    public static void main(String[] args) throws Exception
    {
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
        Statement stat = conn.createStatement();
        stat.executeUpdate("drop table if exists people;");
        stat.executeUpdate("create table people (id INTEGER PRIMARY KEY, name);");
        PreparedStatement prep = conn.prepareStatement("insert into people values (NULL, ?);");
 
        prep.setString(1, "Fonduee");
        prep.addBatch();
 
        prep.setString(1, "Севак");
        prep.addBatch();
 
        prep.setString(1, "mutagen");
        prep.addBatch();
 
        conn.setAutoCommit(false);
        prep.executeBatch();
        conn.setAutoCommit(true);
 
        ResultSet rs = stat.executeQuery("select * from people;");
        while (rs.next())
        {
            System.out.println("id = " + rs.getInt("id"));
            System.out.println("name = " + rs.getString("name"));
        }
        rs.close();
        conn.close();
    }
}
1
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
02.02.2013, 22:42  [ТС]
Fonduee, спасибо, буду пробовать

Добавлено через 28 минут
Еще раз спасибо большое!
Вот, что получилось
Java
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
package com.sevak_avet;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
 
public class SQLiteDB {
    private static Connection c = null;
    private static java.sql.Statement s = null;
    private static PreparedStatement prep = null;
    
    private static String url = "jdbc:sqlite:mydb.db";
    private static String name = "Sevak";
    private static String pass = "123";
    
    private static String createTable = 
            "create table books(id INTEGER PRIMARY KEY, author, name);";
    private static String check = 
            "drop table if exists books;";
    
    public static void main(String[] args) throws SQLException {
        try {
            Class.forName("org.sqlite.JDBC");
            System.out.println("Driver loading is succsess!\n");
            c = DriverManager.getConnection(url, name, pass);
            System.out.println("Connected!");
            s = c.createStatement();
            System.out.println("Statement created!\n");
            
            s.executeUpdate(check);
            s.executeUpdate(createTable);
            prep = c.prepareStatement("insert into books values (NULL, ?, ?);");
            
            SQLiteDB db = new SQLiteDB();
            
            db.insertValue("А.С.Пушкин", "Капитанская дочка");
            db.insertValue("М.Ю.Лермонтов", "Мцыри");
            db.insertValue("М.А.Булгаков", "Мастер и Маргарита");
            
            c.setAutoCommit(false);
            prep.executeBatch();
            c.setAutoCommit(true);
            
            db.printTable();
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(c!=null){
                c.close();
                System.out.println("Connection closed!");
            }
            if(s!=null){
                s.close();
                System.out.println("Statement closed!");
            }
        }
    }
        
    public void insertValue(String author, String name) throws SQLException{
        prep.setString(1, author);
        prep.setString(2, name);
        prep.addBatch();
    }
    
    public void printTable() throws SQLException{
        ResultSet rs = s.executeQuery("select * from books");
        while(rs.next()){
            int id = rs.getInt("id");
            String author = rs.getString("author");
            String name = rs.getString("name");
            
            StringBuilder out = new StringBuilder();
            out.append(id).append("   ").append(author).append("   ").append(name);
            
            System.out.println(out.toString());
        }
        System.out.println();
    }
    
    public void clearTable() throws SQLException{
        s.executeUpdate("delete from books");
        System.err.println("Database cleared!\n");
    }
}
Добавлено через 15 минут
Fonduee, только что попробовал внести какие-либо данные в базу, потом закомментить код, который инсертит данные и вывести таблицу на печать, но ничего нет! как-то криво значит мы сделали

Добавлено через 41 минуту
Java
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
package com.sevak_avet;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
 
public class SQLiteDB {
    private static Connection c = null;
    private static java.sql.Statement s = null;
    private static PreparedStatement prep = null;
    
    private static String url = "jdbc:sqlite:mydb.db";
    private static String name = "Sevak";
    private static String pass = "123";
    
    //private static String check = "drop table if exists books;";
    
    private static String createTable = 
            "create table if not exists books(id INTEGER PRIMARY KEY, author, name);";
    
    public static void main(String[] args) throws SQLException {
        try {
            Class.forName("org.sqlite.JDBC");
            System.out.println("Driver loading is succsess!\n");
            c = DriverManager.getConnection(url, name, pass);
            System.out.println("Connected!");
            s = c.createStatement();
            System.out.println("Statement created!\n");
            
            //s.executeUpdate(check);
            s.executeUpdate(createTable);
            prep = c.prepareStatement("insert into books values (NULL, ?, ?);");
            
            SQLiteDB db = new SQLiteDB();
            
            batch();
            db.printTable();
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(c!=null){
                c.close();
                System.out.println("Connection closed!");
            }
            if(s!=null){
                s.close();
                System.out.println("Statement closed!");
            }
        }
    }
        
    public void insertValue(String author, String name) throws SQLException{
        prep.setString(1, author);
        prep.setString(2, name);
        prep.addBatch();
    }
    
    public static void batch() throws SQLException{
        c.setAutoCommit(false);
        prep.executeBatch();
        c.setAutoCommit(true);
    }
    
    public void printTable() throws SQLException{
        ResultSet rs = s.executeQuery("select * from books");
        while(rs.next()){
            int id = rs.getInt("id");
            String author = rs.getString("author");
            String name = rs.getString("name");
            
            StringBuilder out = new StringBuilder();
            out.append(id).append("   ").append(author).append("   ").append(name);
            
            System.out.println(out.toString());
        }
        System.out.println();
    }
    
    public void clearTable() throws SQLException{
        s.executeUpdate("delete from books");
        System.err.println("Database cleared!\n");
    }
}
Вот, вроде рабочая
0
Музыка нас Связала
 Аватар для Fonduee
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
02.02.2013, 22:43
Изменения через PreparedStatement.executeUpdate();

Java
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
package sqlite;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
 
public class SqliteTest
{
    public static void main(String[] args) throws Exception
    {
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
        Statement stat = conn.createStatement();
        stat.executeUpdate("drop table if exists library;");
        stat.executeUpdate("create table library (id INTEGER PRIMARY KEY, author, name);");
        PreparedStatement prep = conn.prepareStatement("insert into library values (NULL, ?, ?);");
 
        prep.setString(1, "А.С. Пушкин");
        prep.setString(2, "Капитанская дочка");
        prep.addBatch();
 
        prep.setString(1, "М.А. Булгаков");
        prep.setString(2, "Мастер и Маргарита");
        prep.addBatch();
 
        prep.setString(1, "Н.В. Гоголь");
        prep.setString(2, "Нос");
        prep.addBatch();
 
        conn.setAutoCommit(false);
        prep.executeBatch();
        conn.setAutoCommit(true);
 
        System.out.println("БД (до):");
        ResultSet rs = stat.executeQuery("select * from library;");
        while (rs.next())
        {
            System.out.println("id = " + rs.getInt("id"));
            System.out.println("id = " + rs.getString("author"));
            System.out.println("name = " + rs.getString("name"));
        }
        rs.close();
 
        PreparedStatement update = conn.prepareStatement("update library set name=? where id=?;");
 
        update.setString(1, "Вечера на хуторе близ Диканьки");
        update.setString(2, "3");
        update.executeUpdate();
 
        System.out.println("БД (после)");
        rs = stat.executeQuery("select * from library;");
        while (rs.next())
        {
            System.out.println("id = " + rs.getInt("id"));
            System.out.println("id = " + rs.getString("author"));
            System.out.println("name = " + rs.getString("name"));
        }
        rs.close();
 
        conn.close();
    }
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
БД (до):
id = 1
id = А.С. Пушкин
name = Капитанская дочка
id = 2
id = М.А. Булгаков
name = Мастер и Маргарита
id = 3
id = Н.В. Гоголь
name = Нос
БД (после)
id = 1
id = А.С. Пушкин
name = Капитанская дочка
id = 2
id = М.А. Булгаков
name = Мастер и Маргарита
id = 3
id = Н.В. Гоголь
name = Вечера на хуторе близ Диканьки
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2013, 22:43
Помогаю со студенческими работами здесь

SQLite ошибка выполнения INSERT
При выполнении команды INSERT бд не изменяется и выдаёт ошибку QSqlError("", "", "") void Train::addCar(QString id,QString...

SQLite INSERT уходит в цикл
Добрый день! Есть проверка наличия записи в базе. Если идентичная запись отсутствует, то должна добавляться новая. В том случае, если в...

Не работает функция insert sqlite
Собственно не работает функция insertData и есть подозрения что не работает float(self.entryMoney.get()). Думаю ошибка где-то на...

Insert запрос к sqlite с foreign key
Здравствуйте. есть такая тестовая база CREATE TABLE mt (id INTEGER PRIMARY KEY AUTOINCREMENT, zk INTEGER, kt TEXT); CREATE...

SQLite, Dapper, пытаюсь выполнить insert
Здравствуйте, пробую Dapper, как средство коммуникации с SQLite. выполнить insert получается. Это работает. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru