我为科学程序(Python)创建了一个数据库(使用sqlite3)。该程序的建立使循环逐渐建立数据库。因此,问题在于添加带有循环的列。我举了一个例子。它表明问题出在定义新列名(Name1)的变量上。
import sqlite3
import os
conn=sqlite3.connect(':memory:')
c=conn.cursor()
c.execute('''CREATE TABLE TableName (Var1 REAL, Var2 REAL)''')
Name1='Test1'
c.execute('''ALTER TABLE TableName ADD COLUMN "+Name1+" INTEGER''')
Name1='Test2'
c.execute('''ALTER TABLE TableName ADD COLUMN "+Name1+" INTEGER''')
Run Code Online (Sandbox Code Playgroud)
请问有人可以解决这个问题吗?感谢,并有一个愉快的一天。
在我的Android应用程序中,我使用编译语句来快速插入行:
insert = db.compileStatement(
"INSERT INTO foo (id, aaa, bbb, ccc) " +
"VALUES (?,?,?,?)");
Run Code Online (Sandbox Code Playgroud)
这工作正常且非常快.但是当已经foo有了id,我收到以下异常:
column id is not unique (code 19)
Run Code Online (Sandbox Code Playgroud)
覆盖现有行的正确方法是什么?
我有一个主键列表,我需要从greendao数据库中获取这些元素。
最简单的方法是逐个查询每个对象并将其插入列表中:
public List<MyObject> getMyObjectByIds(List<String> ids) {
List<MyObject> result = new ArrayList<MyObject>();
for (String id : ids) {
QueryBuilder<MyObject> queryBuilder = myObjectDao.queryBuilder();
MyObject myObject = queryBuilder.where(MyObjectDao.Properties.Id.eq(id)).unique();
result.add(myObject);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎非常无效,因为它必须执行ids.size()查询。具有多个OR语句的单个查询会更好。但是,由于whereOr()和or()方法仅除了2个或更多参数外,您必须制作许多IF ELSE语句才能捕获具有0、1或2个id的列表:
public List<MyObject> getMyObjectByIds(List<String> ids) {
QueryBuilder<MyObject> queryBuilder = myObjectDao.queryBuilder();
if (ids.size() == 0) {
List<MyObject> result = new ArrayList<MyObject>();
return result;
} else if (ids.size() == 1) {
return queryBuilder.where(MyObjectDao.Properties.Id.eq(ids.get(0))).list();
} else if (ids.size() == 2) {
queryBuilder.whereOr(MyObjectDao.Properties.Id.eq(ids.get(0)), MyObjectDao.Properties.Id.eq(ids.get(1)));
return queryBuilder.list();
} else …Run Code Online (Sandbox Code Playgroud) goodmornig,我在Android studio上创建数据库时遇到问题.代码没有问题,但应用程序说"不幸停止".我怎么解决这个问题?
package com.example.maria.database;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
DatabaseHelper myDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDB = new DatabaseHelper(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml. …Run Code Online (Sandbox Code Playgroud) 所以我看到并阅读了所有相同的问题,试图解决问题,但我没有找到正确的答案.我试图修改VERSION NUMBER,运行应用程序,但我有错误.之后我从手机中删除了应用程序,将VERSION NUMBER更改为1,再次运行应用程序...同样的错误.
这是我的代码:
MySQLite sql;
Context context;
public MySQLiteAdapter(Context context) { //constructor
sql = new MySQLite(context);
this.context=context;
}
public long insertUser(String Username,String Pass, String Name, String Mail){
SQLiteDatabase db=sql.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(MySQLite.COLUMN_USERNAME,Username);
cv.put(MySQLite.COLUMN_PASSWORD,Pass);
cv.put(MySQLite.COLUMN_REALNAME,Name);
cv.put(MySQLite.COLUMN_MAIL,Mail);
long id=db.insert(MySQLite.TABLE_USERS,null,cv);
return id;
}
class MySQLite extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "APPLICATION"; //name database
private static final int DATABASE_VERSION = 1;
public static final String TABLE_USERS="users_table";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_USERNAME="USERNAME"; …Run Code Online (Sandbox Code Playgroud) 当我尝试在我的onResume()方法中向我的List添加一些值时,我收到此错误:
java.lang.RuntimeException: Unable to resume activity {.../...MainActivity}: java.lang.UnsupportedOperationException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3096)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3127)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2482)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5415)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)
Caused by: java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:404)
at java.util.AbstractList.add(AbstractList.java:425)
at de.toeducate.tograde.MainActivity.onResume(MainActivity.java:151)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1258)
at android.app.Activity.performResume(Activity.java:6237) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3085)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3127)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2482)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5415)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)
Run Code Online (Sandbox Code Playgroud)
这是我写的代码:
List<Integer> marks = Collections.emptyList();
for (int i = 0; i < dataBase.getDataMark().size(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试插入数据sqlite Database.我正在按照Youtube教程执行此任务.
我编写了以下代码并成功创建Sqlite Database file但是当我尝试插入数据时,它会给出错误消息.
我写了以下代码.请指导我在这里做错了什么.
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME="ep";
public static final String TABLE_NAME= "transactionsHistory";
public static final String ID= "ID";
public static final String MESSAGE= "MESSAGE";
public static final String CREATE_TABLE= "create table "+ TABLE_NAME + " ( "+ID+" INTEGER PRIMARY KEY AUTO INCREMENT, "+MESSAGE+" TEXT)";
public static final String DROP_TABLE= "DROP TABLE IF EXISTS"+ TABLE_NAME;
private Context context;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, …Run Code Online (Sandbox Code Playgroud) 我知道这是一个非常基本的问题,但是由于某种原因,我无法摆脱这一错误。我正在尝试显示/将数据库中所有表的名称(名为“ GData.db”)放入available_tablesPython中的变量中。目前,我有以下内容:
con = sql.connect(r'/Users/linnk/Desktop/Results/GData.db')
cur = con.cursor()
cur.execute("SHOW TABLES IN GData")
available_table=(cursor.fetchall())
Run Code Online (Sandbox Code Playgroud)
这给我倒数第二行的以下错误:
OperationalError: near "SHOW": syntax error
Run Code Online (Sandbox Code Playgroud)
我已经在网上查看了SHOW TABLES文档,但没有找到对我有帮助的信息。
我想使用sqlite3的executemany()插入多个值Python3。
码:
import sqlite3
conn = sqlite3.connect('rssnewsdata.db')
c = conn.cursor()
entries = [
('url1', 1234, 'title1', 'summary1', 'feedurl1'),
('url2', 1235, 'title2', 'summary2', 'feedurl2'),
('url3', 1236, 'title3', 'summary3', 'feedurl3'),
('url4', 1237, 'title4', 'summary4', 'feedurl4')
]
c.executemany('INSERT INTO entries VALUES (?, ?, ?, ?, ?)', entries)
Run Code Online (Sandbox Code Playgroud)
该db文件存在,该表存在,我可以使用Python3到SELECT来自它,所以连接到它是没有问题的。该栏目是TEXT,INTEGER,TEXT,TEXT,TEXT键入。
Python没有报告错误。缺什么?
我正在使用最新的Zeos和SQLite 3.一旦我们创建了所有持久性整数字段,它通常很顺利,从MySQL转换TLargeInt.
但是当我们使用列定义unsigned big int(根据https://www.sqlite.org/datatype3.html允许的唯一无符号类型)时,Delphi会调用结果字段a ftWidestring.
sqlite ×10
android ×6
java ×3
mysql ×2
python ×2
sql ×2
database ×1
delphi ×1
executemany ×1
greendao ×1
list ×1
python-3.x ×1
sql-insert ×1
zeos ×1