Да, да, я уточняю что у меня проблема именно в этом не ругайтесь))Foenix писал(а):при подключении к ms sql нужен другой драйвер. Сто раз тут обсуждалось.
Android и MySQL
Re: Android и MySQL
Re: Android и MySQL
Alt, эту тему с самого начала и тут ещё почитай
viewtopic.php?f=41&t=1876
viewtopic.php?f=41&t=1876
Re: Android и MySQL
Да спасибо, читал) я понял что изначально у вас недопонимание сложилось ты подключался к майскл через jtds, а тебе советы давали касаемо другого драйвера. когда же ты другой драйвер взял все получилось(исключим ошибку локалхоста, и подключения драйверов) это я уже поборол). у меня просто когда я подключался с драйвером мускл к мсскл выходила ошибка сокетов, то есть конект идет но сервак не пускает. я сейчас пробую jtdc подсключить и спомощью него подключиться.
Re: Android и MySQL
чтобы предметно говорить код выложу
[syntax=java]package com.samples.app.dbcontact;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class DbCreateActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button bCreate = (Button) findViewById(R.id.button);
bCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),
"MySQL Connect Example.", Toast.LENGTH_SHORT).show();
Connection conn = null;
/* String url = "jdbc:mysql://10.16.16.34:1406/base_name";
String driver = "com.mysql.jdbc.Driver";
String userName = "login";
String password = "qwerty"; */
String url = "jdbc:jtds:sqlserver://10.16.16.34:1406/base_name";
String driver = "net.sourceforge.jtds.jdbc.Driver";
String userName = "login";
String password = "qwerty";
try {
Toast.makeText(getApplicationContext(), "sozdaem driver",
Toast.LENGTH_SHORT).show();
Class.forName(driver).newInstance();
Toast.makeText(getApplicationContext(), "podkluchaemsya",
Toast.LENGTH_SHORT).show();
conn = DriverManager.getConnection(url, userName, password);
Toast.makeText(getApplicationContext(),
"Connected to the database", Toast.LENGTH_SHORT)
.show();
conn.close();
Toast.makeText(getApplicationContext(),
"Disconnected from database", Toast.LENGTH_SHORT)
.show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "ne rabotaet",
Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(),
"Msg: " + e.getMessage(), Toast.LENGTH_SHORT)
.show();
}
}
});
}
}[/syntax]
Конект с еклипса на базу MSSQL server находящуюся в сети. использую эмулятор
[syntax=java]package com.samples.app.dbcontact;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class DbCreateActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button bCreate = (Button) findViewById(R.id.button);
bCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),
"MySQL Connect Example.", Toast.LENGTH_SHORT).show();
Connection conn = null;
/* String url = "jdbc:mysql://10.16.16.34:1406/base_name";
String driver = "com.mysql.jdbc.Driver";
String userName = "login";
String password = "qwerty"; */
String url = "jdbc:jtds:sqlserver://10.16.16.34:1406/base_name";
String driver = "net.sourceforge.jtds.jdbc.Driver";
String userName = "login";
String password = "qwerty";
try {
Toast.makeText(getApplicationContext(), "sozdaem driver",
Toast.LENGTH_SHORT).show();
Class.forName(driver).newInstance();
Toast.makeText(getApplicationContext(), "podkluchaemsya",
Toast.LENGTH_SHORT).show();
conn = DriverManager.getConnection(url, userName, password);
Toast.makeText(getApplicationContext(),
"Connected to the database", Toast.LENGTH_SHORT)
.show();
conn.close();
Toast.makeText(getApplicationContext(),
"Disconnected from database", Toast.LENGTH_SHORT)
.show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "ne rabotaet",
Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(),
"Msg: " + e.getMessage(), Toast.LENGTH_SHORT)
.show();
}
}
});
}
}[/syntax]
Конект с еклипса на базу MSSQL server находящуюся в сети. использую эмулятор
Re: Android и MySQL
обсуждается все в куче, т.к. кроме драйвера различий нету никаких
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Android и MySQL
Alt, сложилось мнение, что если не в отдельном потоке подключаться - работает не корректно, а в большинстве случаев и вовсе не работает
уж не знаю почему, но на практике тоже помогает, хотя прямой зависимости я не вижу)
уж не знаю почему, но на практике тоже помогает, хотя прямой зависимости я не вижу)
Re: Android и MySQL
Вообщем взял за основу код Исаева, но использовал другой драйвер для подключения (jtds-1.3.1), подключал драйвер непосредственно в проект как внешнюю JAR, на вкладке библиотеки включил. но либо всеже класс должен быть другой, либо сам драйвер не подключился)))
[syntax=java] try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
log.info(">>> jdbc.Driver: instance successful");
} catch (Exception e) {
log.info(">>> jdbc.Driver: instance error");
e.printStackTrace();
}
[/syntax]
C драйвером разобрался, увиделся)
11-07 14:13:38.832: I/MainActivity(655): >>> jdbc.Driver: instance successful
а вот дальше ...
11-07 14:13:38.832: I/MainActivity(655): >>> jdbc.Driver: connect error
11-07 14:13:38.843: I/System.out(655): >SQLException: No suitable driver
Хм. заметил еще особенность с с драйвером выложенным в ветке(jtds-1.2.6-dist) инстансе сакцес, а скаченой новой версией(jtds-1.3.1) еррор ))
[syntax=java] try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
log.info(">>> jdbc.Driver: instance successful");
} catch (Exception e) {
log.info(">>> jdbc.Driver: instance error");
e.printStackTrace();
}
[/syntax]
C драйвером разобрался, увиделся)
11-07 14:13:38.832: I/MainActivity(655): >>> jdbc.Driver: instance successful
а вот дальше ...
11-07 14:13:38.832: I/MainActivity(655): >>> jdbc.Driver: connect error
11-07 14:13:38.843: I/System.out(655): >SQLException: No suitable driver
Хм. заметил еще особенность с с драйвером выложенным в ветке(jtds-1.2.6-dist) инстансе сакцес, а скаченой новой версией(jtds-1.3.1) еррор ))
Re: Android и MySQL
да, в зависимости от версии могут быть ошибки.. КОннект - ищите несоответствие уже далее - пароль, сервер не слушает tcp ip или еще что-нибудь такое.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Android и MySQL
Alt, у меня та версия тоже так и не заработала
в конце концов взял mysql-connector-java-5.1.26-bin.jar
подключение:
в конце концов взял mysql-connector-java-5.1.26-bin.jar
подключение:
Код: Выделить всё
Thread t = new Thread(new Runnable() {
public void run() {
Log.d(LOG_TAG,">>> Thread is created");
Connection conn = null;
String sServerName = "10.0.2.2:3306";
String sDBName = "name";
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "");
properties.setProperty("useUnicode", "true");
properties.setProperty("characterEncoding", "UTF-8");
properties.setProperty("autoReconnect", "true");
try {
Class.forName("com.mysql.jdbc.Driver");
Log.d(LOG_TAG,">>> jdbc.Driver: instance successful");
} catch (Exception e) {
Log.d(LOG_TAG,">>> jdbc.Driver: instance error");
e.printStackTrace();
}
try {
conn=DriverManager.getConnection("jdbc:mysql://"+sServerName+"/"+sDBName,properties);
//if(conn!=null) {
Log.d(LOG_TAG,">>> jdbc.Driver: connect successful");
}
Re: Android и MySQL
Foenix,
можно всё таки примерчик, как в потоке писать в DB?
он мне не даёт никак, вылетает с исключением
вот в этой строке
db.insert(LOCAL_TABLE_NAME, null, cv);
компилятор ругается что db не final
а если её сделать final, тогда естественно ловим исключение
можно всё таки примерчик, как в потоке писать в DB?
он мне не даёт никак, вылетает с исключением
Код: Выделить всё
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
// --- Local_DB_Structur --------------
ID = "id";
PID = "pid";
TITLE = "title";
TEXT= "text";
final String SQL_CREATE_ENTRIES="CREATE TABLE IF NOT EXISTS "
+ LOCAL_TABLE_NAME+" ("+ID+" INT, "
+ PID+" INT, "
+ TITLE+" VARCHAR(255), "
+ TEXT+" VARCHAR(255))";
db.execSQL(SQL_CREATE_ENTRIES);
// ------------------------------------
try {
Thread t = new Thread(new Runnable() {
public void run() {
Log.d(LOG_TAG,">>> Thread is created");
Connection conn = null;
String sServerName = "10.0.2.2:3306";
String sDBName = "jugendkultur";
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "");
properties.setProperty("useUnicode", "true");
properties.setProperty("characterEncoding", "UTF-8");
properties.setProperty("autoReconnect", "true");
try {
Class.forName("com.mysql.jdbc.Driver");
Log.d(LOG_TAG,">>> jdbc.Driver: instance successful");
} catch (Exception e) {
Log.d(LOG_TAG,">>> jdbc.Driver: instance error");
e.printStackTrace();
}
try {
conn=DriverManager.getConnection("jdbc:mysql://"+sServerName+"/"+sDBName,properties);
Log.d(LOG_TAG,">>> jdbc.Driver: connect successful");
String query = "SELECT id, pid, title, language FROM `tl_page` WHERE language <> ''";
Log.d(LOG_TAG,">>> Query: "+query);
Statement s;
try {
s=conn.createStatement();
s.executeQuery(query);
ResultSet rs;
rs = s.getResultSet();
// ~~~~~~~~~ Создание локальной базы данных ~~~~~~~~~~~~~~~~
// создаем объект для данных
ContentValues cv = new ContentValues();
while (rs.next()) {
String id=rs.getString("id");
String pid=rs.getString("pid");
String title=rs.getString("title");
String language=rs.getString("language");
Log.d(LOG_TAG, "{id="+id+"; pid="+pid+"; title="+title+"; language="+language+"}");
// Log.d(LOG_TAG, "--- Insert in mytable: ---");
// подготовим данные для вставки в виде пар: наименование столбца -
// значение
cv.put("id",id);
cv.put("pid", pid);
cv.put("title", title);
// вставляем запись и получаем ее ID
long rowID = db.insert(LOCAL_TABLE_NAME, null, cv);
dbInsert(LOCAL_TABLE_NAME, null, cv);
Log.d(LOG_TAG, "row inserted, ID = " + rowID);
}
Log.d(LOG_TAG,"### Created: "+SQL_CREATE_ENTRIES+" ###");
.......
db.insert(LOCAL_TABLE_NAME, null, cv);
компилятор ругается что db не final
а если её сделать final, тогда естественно ловим исключение
Код: Выделить всё
ERROR/AndroidRuntime(27670): FATAL EXCEPTION: Thread-8
java.lang.IllegalStateException: database not open
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1493)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
at com.example.Todo_List.DBHelper$1.run(DBHelper.java:138)
at java.lang.Thread.run(Thread.java:1096)
Re: Android и MySQL
Вот ты упрямый, а? я ж тебе предложила другой вариант, правильный..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Android и MySQL
да вроде разобрался... после выходных всё стало прозрачнее)
Re: Android и MySQL
Foenix, выборочно считал, создал локальную бд
Но пара вопросов ещё остались:
1. Надо ли задуматься о том моменте, что база создаётся в потоке?
ведь по идее пока поток не отработал до конца, я не должен бы к ней обращаться иначе будут валиться исключения
как-то надо дождаться его завершения прежде, чем работать дальше?
2.
как ответ получить в ResultSet? Все методы SQLiteDatabase возвращают Cursor
Но пара вопросов ещё остались:
1. Надо ли задуматься о том моменте, что база создаётся в потоке?
ведь по идее пока поток не отработал до конца, я не должен бы к ней обращаться иначе будут валиться исключения
как-то надо дождаться его завершения прежде, чем работать дальше?
2.
Код: Выделить всё
SQLiteDatabase mdb;
mdb=getWritableDatabase();
mdb.execSQL(queryStr);
...
Re: Android и MySQL
Вот поэтому нужно использовать ContentProvider - он сам руководит доступом, никогда исключений с доступом не будет. Вообще говоря - читать можно базу сколько угодно потоков, а вот писать - по очереди.
Ответ нельзя получить в ResultSet, только курсор - в чем проблема?
и третье. Зачем тебе для запроса getWritableDatabase? достаточно readble копии.
Ответ нельзя получить в ResultSet, только курсор - в чем проблема?
и третье. Зачем тебе для запроса getWritableDatabase? достаточно readble копии.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Android и MySQL
а его инициализировать обязательно из отдельного приложения? к сожалению тут урок построен именно так...Foenix писал(а):Вот поэтому нужно использовать ContentProvider - он сам руководит доступом, никогда исключений с доступом не будет. Вообще говоря - читать можно базу сколько угодно потоков, а вот писать - по очереди.
Глупо же, как минимум в данном случае... Зачем пользователю ставить один апп, чтобы потом заработал другой?
для программиста нет слова нельзя! Обычно это или лень или отсутствие интереса... Проблеммы нет) просто интересно стало. Если на вход резалтсет даём, почему бы его же и не получать?Foenix писал(а):Ответ нельзя получить в ResultSet, только курсор - в чем проблема
Всё можно, но пока, что нашёл в сети, как-то страшно реализовано
По идее ResultSet правильнее, т.к. он не получает всю выборку сразу, а постепенно по мере обращения получает "окошко", которое задаём в setFetchSize()... т.е. если мы обходим данные и в один момент понимаем, что дальше они не нужны, то они просто не будут получены! а Cursor получает их сразу в полном объёме, потому у него, в отличии от ResultSet есть метод getCount(), т.к. он всё получил сразу и знает сколько у нас записей
на счет третьего, согласен
Re: Android и MySQL
Про контент-провайдеры есть не только урок, а записанный мною вебинар, доступный тут
http://www.youtube.com/watch?v=QEqGgmMkRDk
Насчет твоего второго... у тебя свое какое-то особенное видение, поэтому даже говорить ничего не буду) Все дело в том, что "по-нормальному" это все реализоваывается совершенно другими способами, а не через резалтсет. Потому что курсор - это всего лишь хранилище. Сколько туда запишешь, столько и будет отображаться. Механизмы получить только то, что ограничено, наприер, несколькими строками вообще другие.
http://www.youtube.com/watch?v=QEqGgmMkRDk
Насчет твоего второго... у тебя свое какое-то особенное видение, поэтому даже говорить ничего не буду) Все дело в том, что "по-нормальному" это все реализоваывается совершенно другими способами, а не через резалтсет. Потому что курсор - это всего лишь хранилище. Сколько туда запишешь, столько и будет отображаться. Механизмы получить только то, что ограничено, наприер, несколькими строками вообще другие.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Android и MySQL
очень интересно. например?Foenix писал(а):Механизмы получить только то, что ограничено, наприер, несколькими строками вообще другие.
не всё возможно отфильтровать в запросе.
Re: Android и MySQL
угу, если вы мне сейчас объясните, в чем сходство между "отфильтровать в запросе" и тем, о чем мы говорили до этого.Isaev писал(а):очень интересно. например?Foenix писал(а):Механизмы получить только то, что ограничено, наприер, несколькими строками вообще другие.
не всё возможно отфильтровать в запросе.
И для справки. "в запросе" можно "отфильтровать" очень и очень многое. Вам это даже и не снилось.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Android и MySQL
Foenix, хорошо... как отфильтровать в запросе все записи, первые 6 символов у которых одинаковые, а последний символ - 'Z'? И таких записей надо взять первые 20шт. Остальные условия отфильтровываются запросом.
Мне много чего снилось) Такое я в SQL мало представляю, буду рад примеру.
Потом в цикле я могу считать и кол-во и проверять символы и прерваться когда нужно.
И не надо говорить, что нужно иначе создавать бд, чтобы не заниматься такой ерундой... Не я её создавал, я просто организовываю доступ к готовой)
Мне много чего снилось) Такое я в SQL мало представляю, буду рад примеру.
Потом в цикле я могу считать и кол-во и проверять символы и прерваться когда нужно.
И не надо говорить, что нужно иначе создавать бд, чтобы не заниматься такой ерундой... Не я её создавал, я просто организовываю доступ к готовой)
Re: Android и MySQL
что значит "иначе создавать бд?" я вашу бд и не видела. Дайте таблицу - я покажу как это сделать в запросе. В цикле это делать - нельзя, теряется производительность раз в 100.
и еще не поняла, что значит "первые 6 символов одинаковые"? ЭТо значит, они соответсвуют какой-то строке? Тогда все не просто, а очень просто.
select * from my_table where my_field like 'ABC%' and my_field like '%Z' limit 20
и еще не поняла, что значит "первые 6 символов одинаковые"? ЭТо значит, они соответсвуют какой-то строке? Тогда все не просто, а очень просто.
select * from my_table where my_field like 'ABC%' and my_field like '%Z' limit 20
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198