Sql logic error or missing database no such column

SQL Logic error: No such column Size SQLite Решение и ответ на вопрос 2471096

max328

0 / 0 / 0

Регистрация: 10.12.2015

Сообщений: 24

1

13.06.2019, 19:03. Показов 3562. Ответов 1

Метки нет (Все метки)


Здравствуйте. Во время ввода данных в таблицу, выскакивает следующее исключение: SQL logic error or missing database no such column: Size. С чем это может быть связано?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void button3_Click(object sender, EventArgs e)
        {
            string path = Directory.GetCurrentDirectory();
            string path_all = path + "\1.db";
            SQLiteConnection DB = new SQLiteConnection(string.Format(@"Data Source={0};", path_all));
            SQLiteCommand cmd = new SQLiteCommand();
            DB.Open();
            string query = @"INSERT INTO Bilboards(Format, Size, Adress, Side, Price) VALUES (@Format, Size, Adress, Side, Price)";
            cmd.CommandText = query;
            cmd.Connection = DB;
            cmd.Parameters.Add(new SQLiteParameter("@Format", textBox1));
            cmd.Parameters.Add(new SQLiteParameter("@Size", textBox2));
            cmd.Parameters.Add(new SQLiteParameter("@Ardess", textBox3));
            cmd.Parameters.Add(new SQLiteParameter("@Side", textBox4));
            cmd.Parameters.Add(new SQLiteParameter("@Price", textBox5));
            cmd.ExecuteNonQuery();
            DB.Close();
        }

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Zero day

267 / 231 / 78

Регистрация: 16.12.2015

Сообщений: 943

Записей в блоге: 4

14.06.2019, 08:15

2

max328, поле Size точно присутствует в таблице Bilboards? Если оно точно есть, нет ли, случайно, пробела в названии (в начале или конце), например не «Size», а » Size» или «Size «?



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

14.06.2019, 08:15

2

Hi Guys

I wrote a script that checks the WIFI signal and some other stuff. I want to put that in a SQLite DB.

DB creation:

Add-Type -Path "C:Program FilesSystem.Data.SQLite2010binSystem.Data.SQLite.dll"
$cn = New-Object -TypeName System.Data.SQLite.SQLiteConnection
$cn.ConnectionString = "Data Source=C:DatabaseStatus.db;New=True;
"$cn.Open()
$cm = New-Object -TypeName System.Data.SQLite.SQLiteCommand
$sql = “create table network_State_Polling(create_date  TEXT, LAN_Name TEXT, LAN_State varchar(70), LAN_Signal varchar(50), WiFi_Name varchar(50), WiFi_State varchar(50), WiFi_Signal varchar(50), MBN_Name varchar(50), MBN_State varchar(50), MBN_Signal varchar(50));”
$cm.Connection = $cn
$cm.CommandText = $sql
$cm.ExecuteNonQuery()
$cn.Close()

To test the input of variables i did the following:

Function AddRecord ($Date, $Date1){ Add-Type -Path “C:Program FilesSystem.Data.SQLite2010binSystem.Data.SQLite.dll” $cn = New-Object -TypeName System.Data.SQLite.SQLiteConnection $cn.ConnectionString = “Data Source=C:DatabaseStatus.db” $cn.Open() $cm = New-Object -TypeName System.Data.SQLite.SQLiteCommand $sql = "insert into network_State_Polling values($Date, $Date1,'test2','test3','test','test1','test2','test3','test2','test3');" $cm.Connection = $cn $cm.CommandText = $sql $cm.ExecuteNonQuery() $cn.Close() } $Date = ((Get-Date).ToString('ddMMyyyyHHmmss')) #WIFI $enabledWIFI = Get-WmiObject -Namespace "rootcimv2" -Query 'select NetEnabled from win32_networkadapter where Description = "Intel(R) Dual Band Wireless-AC 7260"' write-host "WiFi connection" if ($enabledWIFI.NetEnabled){ $wlanraw = netsh wlan show interface #$objWLAN = "" | Select-Object SSID, Signal, State ForEach ($Line in $wlanraw) { if ([regex]::IsMatch($Line," SSID")) { $objWLANSSID = $Line -Replace" SSID : ","" } if ([regex]::IsMatch($Line," Signal")) { $objWLANSignal = $Line -replace " Signal : ","" } if ([regex]::IsMatch($Line," State")) { $objWLANState = $Line -replace " State : ","" } } if ([regex]::IsMatch($objWLANSSID, "NmbsSncb")) { $State = $objWLANState write-host "SSID: "$objWLANSSID write-host "Signal: "$objWLANSignal Write-Host "" } }else { Write-Host "Device is not on WIFI or WIFI is disabled" Write-host "" }

AddRecord $Date $objWLANState.ToString()

Don’t focus on the names (LAN, WIFI etc), it’s just for testing.

Unfortunaly i get an error:

Exception calling «ExecuteNonQuery» with «0» argument(s): «SQL logic error or missing database
no such column: connected»
At C:TempAddingLines.ps1:17 char:1
+ $cm.ExecuteNonQuery()
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SQLiteException

Connect is the value of$objWLANState.

Could somebody help me please? I have no idea what i’m doing wrong..

Thanks!

Steini46

  • Изменен тип

    29 сентября 2015 г. 15:46

  • Перемещено
    Bill_Stewart
    29 сентября 2015 г. 15:46
    This is not support forum for third party software

  1. У меня есть вот такой класс DataProvider https://pastebin.com/WKxsCec7 ,
    Который отвечает за коммуникацию плагина с базой данных. Этот класс может работать как с SQLite так и с MySQL. Но проблема в том что при работе с MySQL проблем никаких нет и все Unit тесты проходят но когда я в настройках ставлю isMySqlEnabled false тоесть заставляю работать с SQLite то при сохранении клана мне выдает вот эту ошибку

    java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such column: true)
    
        at org.sqlite.DB.newSQLException(DB.java:383)
        at org.sqlite.DB.newSQLException(DB.java:387)
        at org.sqlite.DB.throwex(DB.java:374)
        at org.sqlite.NativeDB.prepare(Native Method)
        at org.sqlite.DB.prepare(DB.java:123)
        at org.sqlite.Stmt.execute(Stmt.java:113)
        at com.lairon.xclans.data.DataProvider.saveClan(DataProvider.java:114)
        at DataProviderTests.fullClanTest(DataProviderTests.java:94)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
        at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
        at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
        at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
        at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
        at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
        at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)

    пишет что он не нашел колонку при использовании метода saveClan у DataProvider.

    Юнит тесты: https://pastebin.com/5VDhP7nE

    Пробовал удалять файлик с Базой SQLite не помогло

  2. Быстрая раскрутка сервера Minecraft


  3. Dymeth

    Dymeth
    Активный участник
    Пользователь

    Баллы:
    96
    Имя в Minecraft:
    Dymeth

    Ты пытаешься обратиться к полю с названием «true». Естественно, что такого поля нет.
    Если не можешь понять, где ты его используешь — выведи на экран свой запрос после выполнения всех замен плейсхолдеров на параметры.

    Но один важный момент — запросы так формировать нельзя. Ни в SQLite, ни в MySQL, ни где-либо ещё — ты ставишь под угрозу свой сервер. Почитай в интернете по запросу «SQL-инъекция».

    В твоём случае необходимо заменить в строке запроса все конкретные значения параметров на знаки вопроса, а сами параметры устанавливать в запрос при помощи метода statement.setObject(). Данный метод присутствует у интерфейса PreparedStatement, поэтому тебе необходимо будет вместо connection.createStatement() использовать connection.prepareStatement()

  4. Заменил на PreparedStatement и все заработало как часы с обоими базами.
    Про SQL инъекцию я знал не не думал что она работает именно так.
    И кстати вывел SQL до момента изменения на PreparedStatement и он вроде бы был нормальный с виду да и MySql с ним работал хорошо.
    Огромное спасибо


  5. NuaN

    NuaN
    Активный участник
    Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN

    Ну чтобы внедрить SQL-инъекцию это еще нужно сильно постараться. Особенно когда у тебя нет доступа к структуре БД, ты не знаешь какие там вообще таблицы и какие колонки, то вряд-ли что-то можно сделать. Или не?

  6. Даже если и так, риск все равно будет.
    Если представить что большинства используют таблицу с названием users, можно просто сделать что то вроде этого, при условии что запрос будет выглядеть так:

    //Если представить что пользователь ввел в поле эти данные
    String userName = «test; DROP TABLE users»;
    //Готовый запрос
    String query = «SELECT * FROM users WHERE name = » + userName;

    Или простым перебором таких иньекций, может быть какая та база и дропнится)


  7. Dymeth

    Dymeth
    Активный участник
    Пользователь

    Баллы:
    96
    Имя в Minecraft:
    Dymeth

    Существуют способы выяснения названий таблиц, столбцов и так далее (гугл в помощь). Не всегда это воплотимо, но, как написали выше, рисковать не стоит. Достаточно один раз привыкнуть не передавать параметры в строке. Это достаточно просто


  8. NuaN

    NuaN
    Активный участник
    Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN

    Кстати да) Так хорошо можно нашкодить

  9. Без вывода ошибок только наугад и гугл твой не поможет, яндекс тоже.


  10. Dymeth

    Dymeth
    Активный участник
    Пользователь

    Баллы:
    96
    Имя в Minecraft:
    Dymeth

    А что, ошибки никогда не выводятся? Специально для тебя написал «Не всегда это воплотимо»

  11. Нет конечно, у игрока только стандартная ошибка команды будет и все. Так что инъекцию в плагине будет не так просто заюзать, как на сайтах где гореадмин не отключил логирование.

    Последнее редактирование: 22 апр 2022

  12. Dymeth

    Dymeth
    Активный участник
    Пользователь

    Баллы:
    96
    Имя в Minecraft:
    Dymeth

    Передавать параметры НЕ строкой нужно везде, включая сайты. Хватит на пустом месте полемику разводить

  13. Так это вы разводите, я лишь сказал, что проюзать инъекцию сложно без получения ошибок и ваши гуглы вам не помогут.

Поделиться этой страницей

Русское сообщество Bukkit

Bukkit по-русски - свой сервер Minecraft

Понравилась статья? Поделить с друзьями:
  • Sql loader 704 internal error ulconnect ociserverattach 0
  • Sql insert into select error
  • Sql function return error
  • Sql express error 40
  • Sql error что означает